我正在尝试通过代码获取有关c + =程序的一些信息。我在EnvDTE上取得了一些成功,现在我需要使用VCProject和VCCodeModel,并且遇到了转换问题(希望仅此而已...)

在工作类中,我从Connect传递了一个DTE "application"

我有:

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

我想使用“项目”而不是解决方案中的第一个项目作为我在网络上找到的示例(如下所示),但是在大多数情况下,我希望有一些首先起作用的项目。

对于VCProject,我已经尝试过(在Microsoft网站以及所有其他Web示例中):
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 ...有可能吗?

有人可以给我一个主意吗?谢谢你。

最佳答案

当您尝试将CodeModel强制转换为其他VCCodeModel版本时,会出现此问题。每个VS版本都有一个VCCodeModel.dll。

关于c# - 无法将DTE,项目或解决方案转换为VCProject和VCCodeModel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13850291/

10-12 20:36