可以将 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;