SQL 尝试从 .net 核心 dll 创建程序集时出现服务器错误

SQL Server error when trying to create assembly from .net core dll

我正在尝试从 SQL Server 2017 中的 .NET Core 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>

当我 运行 查询时,出现以下错误:

Assembly 'MyAssembly' references assembly 'system.runtime, version=4.2.2.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(The system cannot find the file specified.)). Please load the referenced assembly into the current database and retry your request.

我该如何解决?

基本上不要那样做。 SQL CLR 仅支持 .NET Framework,而且 AFAIK 没有改变这一点的计划。老实说,我可能只是建议“完全避免它”,而只是使用您的数据库来……存储和查询内容。但是,如果您真的想要(并且您了解它会给您带来多大的痛苦):您将不得不更改您的 dll 以针对 .NET Framework 的一个版本(而不是 .NET Framework)。 NET Core 或 .NET 5 等)在服务器上可用。您可以一键将 .NET Standard 2.0 定为目标并在 .NET Framework 的更高版本中使用它,但老实说:我不推荐它 - .NET Framework 中的大多数 .NET Standard 支持都是鸭嘴带周围的谎言垫片站在黑客身上。