到目前为止,我看过两篇关于我的问题的帖子。我想知道如何将EnvDTE.Project转换为VCProject。
在this post中, fun4jimmy 的回答完全在下面的代码行中(取自他的回答):
<uses-permission android:name="android.permission.GET_TASKS" />
我尝试在我的解决方案中做同样的事情:
VCProject vcProject = project.Object as VCProject;
在VS中打开解决方案。该解决方案包含一些C#项目。在我到达
之前,所有内容似乎都是为了执行此代码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
}
}
[...]
只知道这个演员
foreach (VCConfiguration vcConfiguration in vcProject.Configurations)
返回null。
谁能告诉我为什么会这样?我见过 hveiras 建议的this post
每个VS版本都有一个VCCodeModel.dll。
如果VCProjectEngine.dll也是如此,我该如何解决我的问题呢?
我已经更改了对VCProjectEngine.dll的引用,以便它使用Visual Studio 2012(我正在使用的那个),但VCProject vcProject = project.Object as VCProject;
仍然为空。
答案 0 :(得分:3)
VCProject适用于C ++项目,为了使用与C#/ VB项目类似的界面,您必须使用VSProject。
有许多VSLangProj
重载/扩展,您必须找到特定于您需要使用的版本的扩展。请参阅:https://msdn.microsoft.com/en-us/library/1xt0ezx9.aspx,了解从2到100的所有VSLangProj接口(我认为是版本2到版本10)。
答案 1 :(得分:1)
您无法转换Project
对象本身,因为没有继承关系
但是你可以使用内部对象:
VCProject vcProject = project.Object as VCProject;