我想在 .NET Core 2.0 应用程序和 SQL Server CLR 程序之间共享库。我尝试将共享逻辑放在以下项目类型中:
.NET Standard Library
可以从 .NET Core 项目中使用 .NET 标准库,我可以添加来自 SQL Server 项目的引用,但是,不能在 CLR 过程中引用类:
Portable Class Library
可从 CLR 过程中引用可移植类库。 PCL 有一个面向 ASP.NET Core 1.0 的选项,但我找不到面向 .NET Core 2.0 的方法。当我从 .NET Core 2.0 项目引用此库时,出现以下编译错误:
Project PortableLibrary1 is not compatible with netcoreapp2.0 (.NETCoreApp,Version=v2.0). Project PortableLibrary1 supports: dotnet5.0 (.NETPlatform,Version=v5.0)
在 .NET Core 2.0 和 SQL Server CLR 之间共享库还有其他选择吗?
最佳答案
我遇到了类似的问题。
语境
一个 SQL 项目(使用 CLR C# 代码),我想在共享的 .NET 标准项目中迁移一些逻辑,以便能够为我的 CLR 和我的 .NET Core API 拥有一个逻辑。
解决方案
我创建了一个 .NET 标准项目(有两个目标:NET452 和 CORE1.6(对于您的案例 2.0):
<TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
<PackageTargetFallback Condition=" '$(TargetFramework)' == 'netstandard1.6' ">$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
<OutputType>Library</OutputType>
我无法使用该项目中的 System.Data.SqlTypes,因此我创建了一个新项目 NET452 来放置我的 CLR 使用的特定实现。我可以从我的 SQL 项目中引用新项目 NET452。
在这一点上,我在将我的 .NET 标准项目引用到我的 SQL 项目中时遇到了问题。
右键单击 .NET 标准项目,在包中,您可以从 .NET 标准库生成 nuget 包。
这个nuget包会生成一个特定的dll NET452,这个可以在SQL项目内部引用。
在数据库上部署时,您应该手动添加程序集。
开发运营
我在 DevOps 流程中所做的事情:
CREATE ASSEMBLY [Library]
FROM 'D:\Library\Nuget.Library.1.0.0\lib\net452\Library.dll'
WITH PERMISSION_SET = SAFE;
一切对我来说都很好。
我的 .NET Core 库和我的 CLR 之间的共享逻辑
nuget 步骤很烦,我在等微软做支持Nuget 包的SQL 项目https://github.com/NuGet/Home/issues/545
关于.net-core - .NET Core 2.0 和 SQL Server CLR 可以共享类库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47228335/