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

使用Roslyn编译DLL后运行时无法加载SharedLib.dll如何解决?

问题根因

你在调用CSharpCompilation.Create创建编译实例时,第一个参数传入了带.dll后缀的"SharedLib.dll",而这个参数对应的是程序集的内部标识名称(AssemblyName),不是输出文件名。这会导致你编译出的DLL内部程序集名称为SharedLib.dll,而非正常的SharedLib。

当测试项目引用该DLL后,运行时CLR会按照程序集名称自动附加.dll后缀查找文件,也就是会尝试找SharedLib.dll.dll,自然和你放在同目录的SharedLib.dll匹配不上,就抛出了文件找不到的异常。你可以看报错信息里要求加载的程序集名称自带.dll后缀,也直接印证了这个问题。

解决方案

修改你的Roslyn编译代码,将CSharpCompilation.Create的第一个参数改为不带后缀的程序集名称即可:

// 原错误写法
// CSharpCompilation.Create("SharedLib.dll")
// 修改为
CSharpCompilation.Create("SharedLib")

修改后重新编译DLL,替换原有引用的DLL,重新编译测试项目即可正常运行。

可选排查点

如果修改后仍有问题,可以额外检查两项配置:

  • 确认Roslyn编译时引用的基础程序集是.NET Framework 4.8版本的mscorlib,避免跨框架引用问题:你当前代码里用typeof(object).Assembly.Location获取引用路径,如果运行Roslyn编译逻辑的项目本身是.NET Framework 4.8,这个取值是正确的;如果该项目是.NET Core/.NET 5+,这个路径会指向CoreCLR的mscorlib,导致生成的DLL和.NET Framework 4.8不兼容。
  • 确认生成的DLL和测试项目的平台目标一致(同为AnyCPU、x86或x64),避免平台不匹配导致的加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:00:03