【问题标题】:Unable to cast DTE, project or solution to VCProject and VCCodeModel无法将 DTE、项目或解决方案投射到 VCProject 和 VCCodeModel
【发布时间】:2012-12-12 23:13:02
【问题描述】:

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

在工人阶级中,我有一个从 Connect 传递的 DTE "application"

我有:

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

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

对于 VCProject,我已经尝试过(关闭 Microsoft 的网站,以及所有其他网络示例):

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"

我该如何设置?最好使用“项目”...或application.SelectedItems...有可能吗?

有人可以给我一个想法吗?谢谢。

【问题讨论】:

  • 我知道我来晚了,但你可能想看看my post

标签: c# visual-studio-2010 add-in envdte


【解决方案1】:

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

【讨论】:

  • 我在 Visual Studio 2010、2012、2013 和 2015 的 targetet 中遇到了这个问题。唯一实用的解决方案似乎是将类型定义为对象并依赖后期绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2018-01-20
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多