提问者:小点点

尝试从.NET核心dll创建程序集时发生SQL Server错误


我正在尝试从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(系统找不到指定的文件))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

我该怎么修好它?


共1个答案

匿名用户

基本上不要那样做。SQL CLR只支持.NET Framework,而且没有计划改变这一点。老实说,我可能只是建议“完全避免它”,而只是使用您的数据库来存储和查询东西。但是如果您真的想(并且您知道这会给您带来多大的痛苦):您必须更改dll以服务器上可用的.NET Framework版本(而不是.NET Core或.NET 5等)为目标。在推动下,您可以以.NET Standard2.0为目标,并使用.NET Framework内部更高版本,但老实说:我不推荐这样做--在.NET Framework中对.NET Standards的大多数支持都是围绕在黑客身上的。