无法将DTE、项目或解决方案转换为VCProject和VCCodeModel

7

我正在尝试通过代码获取有关c++程序的信息。我已经在EnvDTE方面取得了一些成功,现在我需要使用VCProject和VCCodeModel,但是我遇到了类型转换问题(希望只有这个问题...)

在工作类中,我有一个从Connect传递过来的DTE "application"。

我有:

EnvDTE.Project project = application.SelectedItems.Item(1).Project;
EnvDTE.Solution sol = (EnvDTE.Solution)application.Solution;

我希望使用“项目”而不是解决方案中第一个项目作为网上找到的示例,但更重要的是,我希望首先确保其可行性。
对于VCProject,我已经尝试过以下方法(从微软官网和其他网站找到的所有示例):
VCProject vcProject = (VCProject)application.Solution.Projects.Item(1).Object;
MessageBox.Show(vcProject.ProjectDirectory);

或者...只是
VCProject vcProject = (VCProject)project.Object;

对于VCCodeModel,我翻译成了c#。具体请参考http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vccodemodel.vccodeinclude.aspx

public void GetAllIncludes()
{
  VCCodeModel vcCM = (VCCodeModel)application.Solution.Item(1).CodeModel;
  foreach (VCCodeInclude vcInclude in vcCM.Includes)
  {
    MessageBox.Show(vcInclude.DisplayName);
  }    
}

两者都会抛出异常:

"unable to cast com object of type 'system.__comobject' to interface type Microsoft.VisualStudio.VCCodeModel"
"unable to cast com object of type 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectShim' to type Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProject"

我该如何设置这个?最好使用“project”或application.SelectedItems。是否可行?

能否有人给我一个想法?谢谢。


我知道我来晚了,但你可能想看一下我的帖子 - Kraven
1个回答

1
当您尝试将CodeModel转换为不同的VCCodeModel版本时,就会出现此问题。每个VS版本都有一个对应的VCCodeModel.dll。

1
我在一个针对Visual Studio 2010、2012、2013和2015的Visual Studio包中遇到了这个问题。唯一实际可行的解决方案似乎是将类型定义为对象并依赖于后期绑定。 - Phil Jollans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接