【问题标题】:Can you target .NET Framework, .NET Standard and .NET Core in a NuGet package?能否在 NuGet 包中定位 .NET Framework、.NET Standard 和 .NET Core?
【发布时间】:2020-04-10 03:23:37
【问题描述】:

我是创建 NuGet 包的新手,只玩了几天,就目前而言,我已经成功地在 .NET Frameworks 3.5 到 4.8 上测试了我的包。

顺便说一下,这是包:https://www.nuget.org/packages/ExcelFromList/1.0.4

我的包依赖于 EPPlus,这是我用作引擎的。如果您搜索 EPPlus,您会看到它声明它可以安装在 .NET Framework、.NET Standard 和 .NET Core 上,我已经对此进行了测试,并且是正确的。

所以我不知道如何解决这个问题。

这是关于我的项目的信息:

  • 项目是 .NET 3.5
  • 使用 nuget.exe 创建 NuGet 包
  • 使用 .nuspec 文件创建包(nuget pack <.nuspec>)
  • 只有安装在项目中的 NuGet 包是 EPPLus

这是我的 .nuspec 文件:

<?xml version="1.0" encoding="utf-8" ?>
<package>
  <metadata>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <id>ExcelFromList</id>
    <version>1.0.4</version>
    <title>ExcelFromList</title>
    <description>Straightforward and easy way to create stylized excel workbooks from lists. Add an image, title, subtitles and overal cell styles/formats. Uses the EPPlus engine.</description>
    <releaseNotes>Succesfully tested on .NET frameworks from 3.5 through 4.8</releaseNotes>
    <authors>Raul Marquez</authors>
    <owners>Raul Marquez</owners>
    <copyright>Copyright 2020 Raul Marquez</copyright>
    <projectUrl>https://github.com/RaulMarquezInclan/ExcelFromList</projectUrl>
    <license type="expression">GPL-3.0-only</license>
    <tags>excel list listtoexcel</tags>

    <dependencies>
      <dependency id="EPPlus" version="5.1.0" />
    </dependencies>

  </metadata>

  <files>
    <file src="bin\Debug\net35\ExcelFromList.dll" target="lib\net35" />
    <file src="bin\Debug\net35\ExcelFromList.xml" target="lib\net35" />
  </files>
</package>

使用该配置构建包会引发以下警告:

警告:NU5128:在依赖项中声明了一些目标框架 nuspec 组和 lib/ref 文件夹没有完全匹配 在另一个位置。请参阅以下操作列表: - 为 .NETFramework3.5 添加一个依赖组到 nuspec

但是,正如我之前所说,它仍然可以在不同的 .NET Framework 版本中正常安装和运行。

当尝试在 .NET Standard 或 .NET Core 上安装它时,它会正确安装我的 dll,但不会安装 EPPlus,这是我的包的依赖项。在 .NET Standard 方面,我只需要手动安装它,一切都很好,在 .NET Core 方面,执行相同操作后它告诉我可执行文件无法在项目中运行。

所以,我很困惑的是如何使它们也可用于 .NET Standard 和 .NET Core,通过搜索我已经得到了关于首先将其转换为 .NET 标准的提示,或者有三个不同的 dll,每个对应不同的技术,并在 .nuspec 文件的文件部分等中指定它们。

谁能指点我正确的方向?

编辑:顺便说一下,在查看 EPPlus 包时,我们看到的是:

谢谢。

【问题讨论】:

  • 不知道。我对 UWP 库包也有同样的想法。在几次尝试修复它后我忽略了它,因为影响似乎很小。同样,如果您将其转换为 .net 标准,我怀疑您是否会遇到同样的问题,但它本身可能不值得付出努力。使用 .net 标准制作 nuget 包非常容易。
  • 我认为如果不对基于 .net 框架的项目文件进行任何更改,您将无法正常工作。我遇到过这篇文章medium.com/@SicknoteSteve/…。这可能与您面临的问题类似,因为您需要让您的库了解 .net 标准/.Net 核心

标签: nuget-package compatibility


【解决方案1】:

如果您将.csproj 文件升级到“新”.csproj 文件格式,则可以。我强烈建议您这样做;新的项目格式大大简化且更易于使用。

在这种新格式中,您可以定位多个框架,如下所示:

  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;netstandard2.0;net45;net40;net35</TargetFrameworks>
  </PropertyGroup>

EPPlus 项目文件是如何进行多目标的一个很好的例子。

然后您可以通过运行dotnet pack 来构建您的包,它会自动创建一个针对TargetFrameworks 中列出的所有.NET 版本的NuGet 包。

您将需要使用 .NET Core SDK 来构建您的项目,但您仍然可以在桌面 .NET 上运行您的包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2018-12-28
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多