You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio SDK中VCCodeModel的COM对象转换失败问题

解决VCCodeModel COM转换失败(接口未注册)问题

问题场景

我想通过Visual Studio SDK和Microsoft.VisualStudio.VCCodeModel命名空间访问C++项目信息,创建了面向.NET Framework 4.8的控制台应用,在Visual Studio 2022中手动添加了Microsoft.VisualStudio.VCCodeModel.dll引用。代码如下:

[STAThread]
static void Main(string[] args)
{
    DTE dte = (DTE)Marshal.GetActiveObject("VisualStudio.DTE.15.0");

    if (dte != null)
    {
        CodeModel codeModel = dte.Solution.Item(1).CodeModel;
        if (codeModel != null && codeModel.Language == CodeModelLanguageConstants.vsCMLanguageVC)
        {
            VCCodeModel vcCodeModel = (VCCodeModel)codeModel;

        }
    }
}

控制台应用已通过[STAThread]强制单线程执行,能加载Visual Studio 2017中启动的C项目并判断其为C项目,但转换CodeModel到VCCodeModel时出现错误:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.VisualStudio.VCCodeModel.VCCodeModel'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{A590E96B-CC8C-48AF-9E8F-7C3FE7865586}' failed due to the following error: Interface not registered (Exception from HRESULT: 0x80040155).

核心原因

  • 版本不匹配:引用的是Visual Studio 2022版本的Microsoft.VisualStudio.VCCodeModel.dll,但连接的是Visual Studio 2017的DTE对象。不同VS版本的VCCodeModel COM接口IID不同,VS2017注册的接口IID与VS2022的dll中定义的IID不匹配,导致QueryInterface调用失败。

解决方案

  • 引用对应VS版本的DLL:删除当前VS2022的Microsoft.VisualStudio.VCCodeModel.dll引用,添加Visual Studio 2017对应的版本。默认路径为:C:\Program Files (x86)\Microsoft Visual Studio\2017\{你的版本(如Enterprise/Community)}\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.VCCodeModel.dll
  • 重新注册VS2017的COM组件:以管理员身份打开VS2017的开发者命令提示符,执行命令:
    devenv /setup
    
    该命令会重新注册VS2017的所有COM组件,确保VCCodeModel接口正确注册到系统中。
  • 优化类型转换逻辑:避免直接强制转换,改用as关键字安全转换,防止抛出异常:
    VCCodeModel vcCodeModel = codeModel as VCCodeModel;
    if (vcCodeModel != null)
    {
        // 在这里处理VCCodeModel相关操作
    }
    

内容的提问来源于stack exchange,提问作者JaGo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:23