.net-core - .NET Core 2.0 和 SQL Server CLR 可以共享类库吗?

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

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

.NET Standard Library



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

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 流程中所做的事情:
  • 在从发布分支构建时,修补程序集以匹配发布号 x.x.x
  • 将构建生成的 nuget 发布到内部 nuget 服务器
  • 在发布过程中,将 nuget 包部署到 SQL 服务器上的文件夹中
  • 运行脚本以删除和创建程序集:
     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/

    相关文章:

    docker - Dockerize dotnet core 2.2应用程序,在nopCommerce Dockerfile中放置哪些行以及为什么放行?

    c# - 在 Visual Studio 2017 : Properties not updated correctly 中从 .csproj 文件创建 .nupkg

    docker - 如何在远程Docker服务器上使用Visual Studio在Docker支持下调试.net Core项目

    windows - 使用 VS2017 增强系统 DPI 缩放

    c# - 在 SQL CLR 中访问 COM

    c# - SQL CLR 函数返回可为空的 bool 值

    c# - 为什么 NuGet 包 NLog 不适用于 .NET Core?

    iis - 在 IIS 中托管 .NET Core Web 应用程序时, "In process"和 "out of process"托管模型之间的优缺点是什么

    c# - SQL Assembly WebResponse和字符串解析非常慢

    .net-core - 使用哪些 NuGet 源进行恢复?