C# 以nuspec文件中的多个.NET Framework版本为目标

C# 以nuspec文件中的多个.NET Framework版本为目标,c#,nuget,nuget-package,nuget-spec,C#,Nuget,Nuget Package,Nuget Spec,我有一个包含多个项目的VisualStudio解决方案。对于我想要支持的每个.NET Framework(+.NET Core)版本,都有一个单一的csproj,我希望保持这种状态。它们各自生成一个DLL。所有DLL的名称相同,但略有不同 我最近开始使用nuspec文件和命令NuGet pack从这些DLL生成NuGet包。到目前为止,我已经为每个DLL生成了一个NuGet包 是否可以生成一个包含所有DLL的NuGet包,并在用户安装该包时安装正确的DLL 我在我的nuspec文件中尝试了以下操

我有一个包含多个项目的VisualStudio解决方案。对于我想要支持的每个.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>
这是我单独包装时没有出现的东西。因此,它似乎没有检测到给定的.NET内核特定DLL


我想做的事情可能吗?如果可能,如何做?

您的目标框架应该是
net40
netcoreapp3.1

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


啊,为什么你为目标框架想出了自己的名字,但仍然希望它能工作?尝试使用文档中给出的字符串。为什么不使用
dotnet pack
,让命令自动生成正确的nuspec?TomTom我不知道我应该以不同的方式编写它,我一定误解了我在某处看到的某个示例。正如weichchm给出的答案中所提到的,我试图改变它,但没有任何帮助。zivkan dotnet pack对于.NET核心项目来说确实是一个不错的选择,但如果我理解正确的话,不一定是.NET Framework项目。我试过了,我的.NET核心项目成功地运行了这个命令,但是我的.NET Framework 4.0项目给我的错误消息是,目标“包”在项目中不存在,我无法找到这样的目标标记应该包含什么。谢谢!这可能是一个问题,所以我更改了它,但更改它对原来的问题没有任何影响。@Helena有趣的是,我尝试了你的nuspec文件,并将生成的nuget包安装到.net core 3.1应用程序中,它起了作用。如果您在生成的nupkg文件中查看nuspec文件的内容,它是否包含多个目标?它包含多个目标,但由于某种原因,nuspec文件使用了我在问题中发布的原始格式@我的海伦娜也和你发布的一样(对我来说也是新的),但它对我来说很有用,很奇怪,很有趣。谢谢你的测试。如果我使用7-zip解包NuGet包,并直接添加对lib文件夹中存在的DLL的引用,而不是使用NuGet包管理器添加包,则不会得到任何EROR。
<dependencies>
      <group targetFramework="netcoreapp3.1" />
      <group targetFramework="net40" />
</dependencies>