SQL Server CLR程序集发邮件报错:缺失指定版本依赖DLL
解决SQL Server中加载.NET类库程序集的依赖问题
1. 查找DLL依赖的匹配版本(如4.0.4.1)
- 用
ildasm.exe工具:打开VS开发者命令行,执行ildasm.exe 你的目标DLL路径,在弹出的窗口里展开Manifest节点,就能看到所有依赖程序集的完整版本信息。 - 用.NET CLI命令:在项目根目录运行
dotnet list package --include-transitive,可以列出项目直接和间接依赖的所有包版本,对应到编译后DLL的版本号。 - 查看项目文件:打开类库的
.csproj文件,找到PackageReference节点,里面的Version字段就是对应依赖包的版本,编译后DLL的版本和这个一致。 - 查看DLL属性:右键DLL文件→属性→详细信息,查看“产品版本”或“文件版本”,部分DLL的版本信息直接在这里显示。
2. 打包类库项目的所有引用DLL
- 用
dotnet publish命令:在项目根目录执行dotnet publish -c Release -r win-x64 --self-contained false(根据SQL Server所在系统调整win-x64为对应架构),发布完成后,publish目录里会包含主DLL和所有依赖的DLL文件。 - 配置项目自动复制依赖:在
.csproj文件中添加以下配置,编译时会自动把所有依赖DLL复制到输出目录:
之后编译<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup>bin/Release/netX目录下就会有全部依赖文件。
额外提示(针对SQL Server场景)
SQL Server加载程序集时版本匹配要求严格,必须先加载底层依赖的DLL,再加载上层依赖。比如先执行:
CREATE ASSEMBLY [System.Runtime.CompilerServices.Unsafe] FROM '你的DLL路径\System.Runtime.CompilerServices.Unsafe.dll' WITH PERMISSION_SET = UNSAFE;
再依次加载System.Text.Json、MSGraphMail,最后加载你的主类库DLL。
内容的提问来源于stack exchange,提问作者Jeenath Kumar
相关产品推荐
相关产品推荐

