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

Roslyn 1.0.8通过CodeDomProvider编译代码时自动添加的System.Runtime.dll找不到

解决Roslyn 1.0.8编译时自动添加System.Runtime.dll导致找不到文件的问题

我之前也踩过Roslyn 1.x版本的这个坑,这种随机自动添加错误路径引用的情况,本质是旧版本Roslyn在依赖解析上的bug导致的。咱们一步步来解决:

问题根源

Roslyn 1.0.8在处理目标框架的隐式依赖时,偶尔会错误地从系统用户(systemprofile)的程序集影子缓存目录查找依赖,而非从.NET Framework官方参考程序集目录或项目NuGet依赖目录加载。这种随机触发的情况,通常和编译上下文的目标框架配置、环境变量有关。

具体解决方案

1. 强制指定编译的目标框架版本

不要让Roslyn自动推断目标框架,手动在编译参数里明确指定框架版本,引导Roslyn从正确路径加载依赖。比如你使用.NET Framework 4.7.2,可以这么配置:

var compilerParams = new CompilerParameters();
// 明确指定输出类型和目标框架版本
compilerParams.CompilerOptions = "/target:library /frameworkversion:v4.7.2";
// 其他编译配置(如输出路径、优化选项等)

这样Roslyn会优先从C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2这类官方路径加载依赖,不会再乱找systemprofile下的缓存。

2. 清理系统用户的Assembly Shadow Cache

报错里的路径是系统用户的程序集影子缓存目录,缓存损坏或旧版本引用残留都可能导致Roslyn误加载。你可以:

  • 打开C:\Windows\system32\config\systemprofile\AppData\Local\assembly\dl3目录
  • 删除所有和System.Runtime.dll相关的随机命名文件夹(比如你报错里的8GTGDQKQ.4QR、V42JN801.7NM这类)
  • 或者直接清空整个dl3目录,系统后续会自动重新生成所需的缓存文件

3. 升级到更新的Roslyn版本

1.0.8是比较老旧的版本,微软在后续的Roslyn更新中修复了大量依赖解析类的bug。建议你升级Microsoft.CodeDom.Providers.DotNetCompilerPlatform这个NuGet包到最新稳定版(比如2.x或更高版本,注意和项目目标框架兼容),升级后这类随机引用的问题基本不会再出现。

4. 手动添加正确的System.Runtime引用

如果上面的方法都没效果,你可以手动找到正确的System.Runtime.dll路径,添加到编译引用里:

  • 路径一般在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.x\Facades(x为你的框架版本)
  • 或者从项目的NuGet包目录里找到对应版本
  • 然后添加到编译参数的引用集合中:
compilerParams.ReferencedAssemblies.Add(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Runtime.dll");

额外注意点

确保程序运行时的用户有足够权限访问系统缓存目录,但更关键的是通过指定目标框架让Roslyn走正确的依赖解析逻辑,从根源上避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:18:36