我想在.NET Core 2.0应用程序和SQL Server CLR过程之间共享库。我尝试将共享逻辑放在以下项目类型中:
.NET标准库
可以从.NET Core项目中使用.NET标准库,我可以从SQL Server项目添加引用,但是,CLR过程中不能引用类:
便携式类库
可以从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之间是否还有其他共享库的选项?
答案 0 :(得分:1)
我遇到了类似的问题。
一个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程序包将生成一个特定的NET452 dll,可在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步骤很烦人,我正在等待Microsoft制作支持Nuget软件包https://github.com/NuGet/Home/issues/545的SQL项目