【问题标题】:Can a class library be shared between .NET Core 2.0 and SQL Server CLR?.NET Core 2.0 和 SQL Server CLR 之间可以共享类库吗?
【发布时间】:2017-11-10 17:39:06
【问题描述】:

我想在 .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 之间共享库?

【问题讨论】:

  • 对不起,如果这是一个愚蠢的问题,但我还没有尝试过 .NET Standard 或 .NET Core,但是 .NET Standard 使用了现有的 .NET Framework System.Core、mscorlib 等.NET Framework 4.x 系列和微软提供的 CLR v4?
  • 如果您的目标是 .net 标准而没有任何其他参考,这应该可以工作
  • .NET Standard 项目没有任何其他引用。我尝试过以 .NET Standard 1.0 和 2.0 为目标,结果相同。项目参考显示了警告指示器,但我不确定如何获取有关该问题的更多详细信息。
  • 你找到让它工作的方法了吗?
  • 您有解决方案吗?我有类似的问题

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


【解决方案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包会产生一个特定的dll NET452,这个可以在SQL项目里面引用。

在数据库上部署时,您应该手动添加程序集。

开发运营

我在 DevOps 流程中的工作:

  1. 在从发布分支构建时,修补程序集以匹配发布号 x.x.x

  2. 将构建生成的 nuget 发布到内部 nuget 服务器

  3. 在发布过程中,将nuget包部署到SQL服务器上的一个文件夹中

  4. 运行脚本以删除和创建程序集:

     CREATE ASSEMBLY [Library] 
     FROM 'D:\Library\Nuget.Library.1.0.0\lib\net452\Library.dll'  
     WITH PERMISSION_SET = SAFE; 
    

对我来说一切都很好。

.NET Core 库和 CLR 之间的共享逻辑

nuget步骤烦人,等微软做SQL项目支持Nuget包https://github.com/NuGet/Home/issues/545

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多