Visual studio 2013 ';类型x同时存在于dll和x27中;相同的dll+;转换为正确的对象类型返回null?

Visual studio 2013 ';类型x同时存在于dll和x27中;相同的dll+;转换为正确的对象类型返回null?,visual-studio-2013,envdte,comobject,Visual Studio 2013,Envdte,Comobject,一些信息:我正在使用.NET4.5,并试图扩展VisualStudio2013 这行代码运行良好,我得到一个对象 object vce = dte2.GetObject("Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt"); 根据观察窗口,类型为: Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt 但是,当我

一些信息:我正在使用.NET4.5,并试图扩展
VisualStudio2013

这行代码运行良好,我得到一个对象

object vce = dte2.GetObject("Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt");
根据观察窗口,类型为:
Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt

但是,当我尝试使用此语句强制转换为这种类型时

VersionControlExt vceCast = vce as Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt;
我越来越空了

奇怪的部分: 当我尝试在watch window上施放时,我收到了以下搞笑的错误消息:
类型“Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt”在这两个版本中都存在
“Microsoft.VisualStudio.TeamFoundation.VersionControl.dll”和“Microsoft.VisualStudio.TeamFoundation.VersionControl.dll”

正如您所看到的,它是相同的DLL

我尝试使用
动态
,然后得到
RuntimeBinderInternalCompilerException绑定动态操作时发生意外异常

我使用的参考文献列表:

我的结论是: 我很确定这是因为我使用了一些不好的参考资料。知道怎么找到他们吗



附带问题:我如何遍历像DTE/DTE2这样的COM对象来获取关于“活动”实例及其属性的信息?

对于VS 2013,您需要参考.NET Framework 4.x的全局程序集缓存(GAC)版本12.0.0.0:

c:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TeamFoundation.VersionControl\v4.0_12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TeamFoundation.VersionControl.dll


然后演员阵容就可以了。

您引用的是Microsoft.VisualStudio.TeamFoundation.VersionControl.dll的两个不同版本。不要那样做。您可能必须使用fusion logger来确定谁从何处获取哪个版本。这可能是找到答案的最好方法…@Will,我已经添加了参考截图。这毫无意义。问题可能在于您引用的X引用的是版本N,而您直接引用的是版本M。同样,fusion logging在这方面是你的朋友。次要问题应该在不同的帖子上——你是对的。我参考了
C:\Windows\Microsoft.NET\assembly\GAC\MSIL\Microsoft.VisualStudio.TeamFoundation.VersionControl\v4.0\u 11.0.0.0\uu b03f5f7f11d50a3a\Microsoft.VisualStudio.TeamFoundation.VersionControl.dll
谢谢!