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

C# Roslyn分析器无法调用引用项目的类和方法,如何解决?

Roslyn分析器调用外部类库时程序集加载失败的解决方法

问题总结

开发基于Roslyn API的C#分析器时,调用引用的Recognize类库静态方法后,分析器无诊断输出,捕获到程序集加载错误:

无法加载文件或程序集“FuckRoslyn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。系统找不到指定文件。

不调用类库方法时分析器正常工作,调试时断点无法命中,无堆栈信息。

解决步骤

1. 确认类库引用的复制本地设置

  • 右键分析器项目中的Recognize引用 → 选择属性
  • 将复制本地设置为True,确保类库DLL会被复制到分析器的输出目录

2. 确保VSIX包包含依赖类库

如果是VSIX扩展项目:

  • 打开source.extension.vsixmanifest文件的编辑器
  • 切换到Assets标签,点击New
  • 配置项:
    • 类型:Microsoft.VisualStudio.Assembly
    • 源:A project in current solution
    • 项目:选择Recognize类库
    • 勾选Include in VSIX,保存配置

3. 强制附加调试器查看详细错误

在AnalyzeSymbol方法开头添加调试启动代码,手动关联调试器:

private static void AnalyzeSymbol(SymbolAnalysisContext context)
{
    Debugger.Launch(); // 弹出调试器选择窗口,选择主VS实例
    try
    {
        // 原有代码
        context.ReportDiagnostic(Diagnostic.Create(SingletonDiagnosticDescriptor, context.Symbol.Locations[0], "Test"));
        var result = Recognize.StaticTest.ReturnString();
        context.ReportDiagnostic(Diagnostic.Create(SingletonDiagnosticDescriptor, context.Symbol.Locations[0], result));
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"分析器异常:{ex.ToString()}");
        // 将异常作为诊断输出,方便调试
        context.ReportDiagnostic(Diagnostic.Create(SingletonDiagnosticDescriptor, context.Symbol.Locations[0], $"错误:{ex.Message}"));
    }
}

4. 检查目标框架一致性

  • 确保Recognize类库和分析器项目的目标框架一致(例如均为.NET Standard 2.0或.NET 6)
  • 不一致的目标框架可能导致程序集加载失败

5. 核对程序集名称

错误中提到的FuckRoslyn需确认是否为Recognize类库的实际程序集名称:

  • 打开Recognize项目属性 → 应用程序标签
  • 检查程序集名称是否与错误信息中的名称一致,修正拼写或配置错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:37:43