【问题标题】:Targeting multiple .NET Framework versions in a nuspec file在 nuspec 文件中定位多个 .NET Framework 版本
【发布时间】:2020-03-20 10:36:05
【问题描述】:

我有一个包含多个项目的 Visual Studio 解决方案。对于我想要支持的每个版本的 .NET Framework (+ .NET Core),都有一个 csproj,并且我想保持这种状态。它们都各自生成一个 DLL。所有 DLL 的名称都相同,但略有不同。

我最近开始使用 nuspec 文件和命令 nuget pack 从这些 DLL 中生成 NuGet 包。到目前为止,我已经为每个 DLL 生成了一个 NuGet 包。

是否可以生成一个包含所有 DLL 的单个 NuGet 包,并且当用户安装该包时,安装正确的 DLL?

我在我的 nuspec 文件中尝试了以下内容:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETCoreApp3.1" />
      <group targetFramework=".NETFramework4.0" />
    </dependencies>
  </metadata>
  <files>
    <file src="bin\Company.Product.dll" target="lib\net40" />
    <file src="..\CompanyProductCore\bin\Company.Product.dll" target="lib\netcoreapp3.1" />
  </files>
</package>

当我查看生成的 NuGet 包时,lib 文件夹中有两个预期的子文件夹,它们每个都包含一个看起来正确的 DLL。

但是,当我测试包并尝试将其安装到 .NET Core 应用项目的另一个 Visual Studio 解决方案中时,我收到警告:

Package X was restored using '.NETFramework,Version=v4.6.1...4.6.2...4.7...4.7.1...4.7.2...4.8 instead of the project target framework '.NetCoreApp,Version=3.1'. This package may not be fully compatible with your project.

这是我单独包装时没有出现的东西。所以它似乎没有检测到有一个特定于 .NET Core 的 DLL。

我想做的事是否可行,如果可以,怎么做?

【问题讨论】:

  • 啊,为什么你想出你自己的目标框架的名字并且仍然期望它能够工作?尝试使用文档中给出的字符串。
  • 为什么不用dotnet pack,让命令自动生成正确的nuspec?
  • TomTom 我不知道我应该用不同的方式来写它,我一定是误解了我在某处看到的一些例子。正如weichchm给出的答案中提到的那样,我试图改变它,但它没有帮助。
  • zivkan dotnet pack 似乎确实是 .NET Core 项目的不错选择,但不一定是 .NET Framework 项目,如果我理解正确的话。但我会尝试看看我是否可以让它工作。
  • zivkan 我试过了,我的 .NET Core 项目成功运行了命令,但是我的 .NET Framework 4.0 项目给我的错误消息是项目中不存在目标“包”,并且我找不到这样的目标标签应该包含什么。

标签: c# nuget nuget-package nuget-spec


【解决方案1】:

您的目标框架应该是net40netcoreapp3.1

<dependencies>
      <group targetFramework="netcoreapp3.1" />
      <group targetFramework="net40" />
</dependencies>

https://docs.microsoft.com/en-us/dotnet/standard/frameworks

【讨论】:

  • 谢谢!这可能是一个问题,所以我改变了它,但改变它对原来的问题没有影响。
  • @Helena 有趣的是,我尝试了您的 nuspec 文件并将生成的 nuget 包安装到 .net core 3.1 应用程序中,并且它工作正常。如果查看生成的nupkg文件inside的nuspec文件内容,是否包含多个target?
  • 确实如此,但由于某种原因,nuspec 文件具有我在问题中发布的原始格式。
  • @Helena Mine 也和你发布的一样(这对我来说也是新的),但它对我有用,很奇怪。
  • 非常有趣。感谢您的测试。如果我使用 7-zip 解压 NuGet 包并直接添加对存在于 lib 文件夹中的 DLL 的引用,而不是使用 NuGet 包管理器添加包,则不会出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多