尝试从 .net core dll 创建程序集时出现 SQL Server 错误

问题描述

我正在尝试从 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>

运行查询时出现以下错误

程序集“MyAssembly”引用程序集“system.runtime,version=4.2.2.0,culture=neutral,publickeytoken=b03f5f7f11d50a3a.”,它在当前数据库中不存在。 sql Server 尝试从引用程序集来自的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

我该如何解决

解决方法

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