Dafny 3.0-3.2生成C# DLL依赖System.Private.CoreLib与System库冲突问题
Dafny生成C# DLL出现System.Private.CoreLib依赖冲突的解决方案
该问题根因是Dafny 3.0及以上版本默认生成的C#代码针对.NET Core/.NET 5+ 运行时编译,System.Private.CoreLib是.NET Core系列运行时的内部核心实现库,不允许被业务项目直接引用,手动添加该引用才会导致和默认System.*类库的类型冲突。
可按以下优先级尝试解决方案:
- 调整Dafny编译参数指定目标框架
编译Dafny代码时,新增--cs-target-framework参数匹配你的C#控制台项目的目标框架版本,示例命令如下:
若你的控制台项目基于.NET Framework开发,可指定dafny compile --target:cs --cs-target-framework net6.0 --output:MyDafnyLib.dll 你的Dafny源码文件.dfynetstandard2.0作为目标框架,该版本同时兼容.NET Framework和.NET Core/.NET 5+ 运行时。 - 导出C#源码自行编译类库
给Dafny编译命令添加--no-compile参数,仅生成C#源码而非直接编译为DLL。将生成的C#源码添加到和控制台项目同目标框架的C#类库项目中,自行编译类库后再给控制台项目引用,可完全规避框架不匹配导致的依赖问题。 - 对齐两端项目的目标框架
若以上方案仍无效,可将你的C#控制台项目升级为.NET 6/LTS或更高版本的.NET Core系列框架,和Dafny默认生成的代码运行时保持一致。
注意:无论采用哪种方案,都不要手动添加System.Private.CoreLib作为项目引用,该库的所有公开API都已封装在官方System.*类库中,直接引用必然会出现类型冲突。
内容的提问来源于stack exchange,提问作者Alex Abuin Yepes
相关产品推荐
相关产品推荐

