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

我试图通过代码获得有关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。