可以将 EnvDTE.Project 投射到 VCProject 中吗
Can one cast an EnvDTE.Project into a VCProject
到目前为止,我已经看到两个帖子与我的问题有关。我想知道如何将 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;
returns 空。
谁能告诉我这是为什么?我看过 this post 其中 hveiras 建议
There is a VCCodeModel.dll for each VS version.
如果 VCProjectEngine.dll 也是这种情况,我该如何解决我的问题?
我已经更改了对 VCProjectEngine.dll 的引用,以便它使用 Visual Studio 2012(我正在使用的)的引用,但 vcProject
仍然为空。
VCProject 用于 C++ 项目,为了使用与 C#/VB 项目类似的界面,您必须使用 VSProject.
有许多 VSLangProj
overloads/extensions,您必须找到特定于您需要使用的版本的那个。请参阅:https://msdn.microsoft.com/en-us/library/1xt0ezx9.aspx 从 2 到 100 的所有 VSLangProj 接口(我认为那是版本 2 到版本 10)。
不能强制转换Project
对象本身,因为没有继承关系。
但是你可以使用内部对象:
VCProject vcProject = project.Object as VCProject;
到目前为止,我已经看到两个帖子与我的问题有关。我想知道如何将 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;
returns 空。
谁能告诉我这是为什么?我看过 this post 其中 hveiras 建议
There is a VCCodeModel.dll for each VS version.
如果 VCProjectEngine.dll 也是这种情况,我该如何解决我的问题?
我已经更改了对 VCProjectEngine.dll 的引用,以便它使用 Visual Studio 2012(我正在使用的)的引用,但 vcProject
仍然为空。
VCProject 用于 C++ 项目,为了使用与 C#/VB 项目类似的界面,您必须使用 VSProject.
有许多 VSLangProj
overloads/extensions,您必须找到特定于您需要使用的版本的那个。请参阅:https://msdn.microsoft.com/en-us/library/1xt0ezx9.aspx 从 2 到 100 的所有 VSLangProj 接口(我认为那是版本 2 到版本 10)。
不能强制转换Project
对象本身,因为没有继承关系。
但是你可以使用内部对象:
VCProject vcProject = project.Object as VCProject;