我正在尝试从SQL Server 2017中的.NET核心dll创建程序集:
CREATE ASSEMBLY my_assembly
FROM 'C:\Temp\MyDll.dll' WITH PERMISSION_SET = SAFE;
这是dll csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" Version="161.46041.41" />
</ItemGroup>
</Project>
当我运行查询时,我得到以下错误:
程序集“MyAssembly”引用的程序集“System.Runtime,Version=4.2.2.0,Culture=Neutral,PublicKeyToken=B03F5F7F11D50A3A.”在当前数据库中不存在。SQL Server试图从引用程序集所在的同一位置定位并自动加载引用的程序集,但该操作失败(原因:%2(系统找不到指定的文件))。请将引用的程序集加载到当前数据库中,然后重试您的请求。
我该怎么修好它?
基本上不要那样做。SQL CLR只支持.NET Framework,而且没有计划改变这一点。老实说,我可能只是建议“完全避免它”,而只是使用您的数据库来存储和查询东西。但是如果您真的想(并且您知道这会给您带来多大的痛苦):您必须更改dll以服务器上可用的.NET Framework版本(而不是.NET Core或.NET 5等)为目标。在推动下,您可以以.NET Standard2.0为目标,并使用.NET Framework内部更高版本,但老实说:我不推荐这样做--在.NET Framework中对.NET Standards的大多数支持都是围绕在黑客身上的。