可以将EnvDTE.Project转换为VCProject

时间:2015-04-29 18:11:53

标签: c# visual-studio-2012 envdte

到目前为止,我看过两篇关于我的问题的帖子。我想知道如何将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; 仍然为空。

2 个答案:

答案 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;