【发布时间】:2015-04-29 18:11:52
【问题描述】:
到目前为止,我已经看到了两篇与我的问题有关的帖子。我想知道如何将 EnvDTE.Project 转换为 VCProject。
在this post 中,fun4jimmy 的答案正是在以下代码行中完成的(取自他的答案):
VCProject vcProject = project.Object as VCProject;
我尝试在我的解决方案中做同样的事情:
using EnvDTE;
using Microsoft.VisualStudio.VCProjectEngine;
[...]
private List<string> BuildAssembliesAndReturnTheirName(EnvDTE80.DTE2 dte)
{
Solution sln = dte.Solution;
bool isDirty = false;
foreach (Project project in sln.Projects)
{
VCProject vcProject = project.Object as VCProject;
Configuration activeConfiguration = project.ConfigurationManager.ActiveConfiguration;
foreach (VCConfiguration vcConfiguration in vcProject.Configurations)
{
//business logic
}
}
[...]
在 VS 中打开了一个解决方案。该解决方案包含一些 C# 项目。一切似乎都是为了让这段代码执行,直到我到达
foreach (VCConfiguration vcConfiguration in vcProject.Configurations)
才意识到这个演员表
VCProject vcProject = project.Object as VCProject;
返回空值。
谁能告诉我这是为什么?我见过this post,其中 hveiras 建议
每个 VS 版本都有一个 VCCodeModel.dll。
如果 VCProjectEngine.dll 也是这种情况,我该如何解决我的问题?
我已更改对 VCProjectEngine.dll 的引用,以便它使用 Visual Studio 2012(我正在使用的)的引用,但 vcProject 仍然为空。
【问题讨论】:
-
您是否调试并查看了
project.Object的实际类型是什么? -
@RonBeyer 这是一个 COM 对象,但它的标识似乎为空……这正常吗?
-
@RonBeyer 我问的原因是因为我没有对项目本身进行任何操作。我只是循环浏览这些项目以获取有关它们的一些信息。我知道我询问它的身份是否为 null 可能有点奇怪,但是我在发布循环之后循环项目以获得项目的属性,例如 FullName 和 Properties("OutputFileName") 如果我跳过我的循环,它们可以正常工作.
-
解决方案中有哪些项目?它们是 C++ 还是 C# 项目?
-
VCProject 是针对 C++ 项目的,可以解释为什么它为空,见msdn.microsoft.com/en-us/library/…
标签: c# visual-studio-2012 envdte