可以在.NET Core 2.0和SQL Server CLR之间共享类库吗?

时间:2017-11-10 17:39:06

标签: .net-core visual-studio-2017 sqlclr

我想在.NET Core 2.0应用程序和SQL Server CLR过程之间共享库。我尝试将共享逻辑放在以下项目类型中:

  

.NET标准库

可以从.NET Core项目中使用.NET标准库,我可以从SQL Server项目添加引用,但是,CLR过程中不能引用类: enter image description here

  

便携式类库

可以从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之间是否还有其他共享库的选项?

1 个答案:

答案 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

我在DevOps流程中正在做什么:

  1. 在发布分支上进行构建时,对程序集进行修补以匹配发布号x.x.x
  2. 将构建生成的nuget发布到内部nuget服务器
  3. 在发布过程中,将nuget包部署在SQL Server上的文件夹中
  4. 运行脚本以拖放并创建程序集:

     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项目