簡體   English   中英

可以將一個EnvDTE.Project轉換為VCProject嗎

[英]Can one cast an EnvDTE.Project into a VCProject

到目前為止,我已經看到兩篇有關我的問題的文章。 我想知道如何將EnvDTE.Project轉換為VCProject。

這篇文章中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;

返回null。

誰能告訴我為什么呢? 我看過這篇文章 ,其中hveiras建議

每個VS版本都有一個VCCodeModel.dll。

如果VCProjectEngine.dll也是如此,該如何解決我的問題?

我已更改了對VCProjectEngine.dll的引用,因此它使用的是Visual Studio 2012(我正在使用的工具),但vcProject仍然為null。

VCProject適用於C ++項目,為了與C#/ VB項目使用類似的接口,您必須使用VSProject

有很多VSLangProj重載/擴展,您必須找到特定於您需要使用的版本的VSLangProj 請參閱: https ://msdn.microsoft.com/zh-cn/library/1xt0ezx9.aspx,以了解從2到100的所有VSLangProj接口(我認為是版本2到版本10)。

您不能轉換Project對象本身,因為沒有繼承關系。
但是您可以使用內部對象:

VCProject vcProject = project.Object as VCProject;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM