Ami*_*r M 1 c# .net-assembly sql-server-2017 .net-core-3.1
我正在尝试从 SQL Server 2017 中的 .NET Core dll 创建程序集:
CREATE ASSEMBLY my_assembly
FROM 'C:\Temp\MyDll.dll' WITH PERMISSION_SET = SAFE;
Run Code Online (Sandbox Code Playgroud)
这是 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>
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,出现以下错误:
程序集“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 支持都是围绕谎言的录音带垫片站在黑客。