在 nuspec 文件中定位多个 .NET Framework 版本

Targeting multiple .NET Framework versions in a nuspec file

我有一个包含多个项目的 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。

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

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。

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

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

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

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