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

如何在Roslyn分析器中使用OpenAIClient,解决DiagnosticScopeFactory相关异常?

解决Roslyn分析器中Azure.AI.OpenAI的System.Diagnostics.DiagnosticSource加载异常

这个FileNotFoundException不是安全机制阻止请求导致的,本质是程序集加载失败——Roslyn分析器运行在Visual Studio的宿主环境中,依赖解析逻辑和控制台应用存在差异,导致Azure.AI.OpenAI需要的System.Diagnostics.DiagnosticSource 6.0.0.0无法被找到。以下是具体解决方案:

1. 显式安装对应版本的依赖包

直接在你的Roslyn分析器项目中安装System.Diagnostics.DiagnosticSource 6.0.0版本的NuGet包:

Install-Package System.Diagnostics.DiagnosticSource -Version 6.0.0

或者通过NuGet包管理器搜索安装,确保版本与Azure.AI.OpenAI依赖的版本完全匹配。

2. 配置项目的依赖复制规则

在分析器项目的.csproj文件中添加以下配置,确保依赖程序集被复制到输出目录:

<ItemGroup>
  <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="6.0.0">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  </PackageReference>
</ItemGroup>

也可以全局开启锁定文件程序集复制,在项目文件中添加:

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

3. 添加程序集绑定重定向

由于Visual Studio宿主环境可能存在版本冲突,新建或修改分析器项目的app.config文件,添加绑定重定向规则:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

4. 同步测试项目的依赖配置

如果异常是在单元测试中抛出的,需要确保测试项目也包含上述依赖配置,并且测试运行时能访问到System.Diagnostics.DiagnosticSource程序集。

为什么控制台应用正常?

控制台应用的依赖解析基于自身输出目录,所有依赖包都会被复制到输出路径,而Roslyn分析器作为Visual Studio的扩展组件,依赖程序集需要被正确部署到VS能加载的位置,或者通过绑定重定向让VS使用指定版本的程序集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:22:19