为多个.NET Framework版本创建NuGet包

为多个.NET Framework版本创建NuGet包,nuget,nuget-package,csproj,Nuget,Nuget Package,Csproj,我正在开发一个库,希望为.NETFramework的多个版本创建NuGet包。我找不到任何包含完整操作列表的文章 我尝试过的第一个选项是创建一系列配置,如Release_Net45等等。然后,我编辑了csproj,以更正每个配置的输出目录(lib/net45等)和目标框架版本。然后我构建了每个配置。之后,我运行了nuget pack,成功创建了一个包,但有一个警告说没有添加一个dll,因为它已经在包中了 然后我尝试编辑csproj,将TargetFrameworks元素和包元数据元素包含到与发布

我正在开发一个库,希望为.NETFramework的多个版本创建NuGet包。我找不到任何包含完整操作列表的文章

我尝试过的第一个选项是创建一系列配置,如Release_Net45等等。然后,我编辑了csproj,以更正每个配置的输出目录(lib/net45等)和目标框架版本。然后我构建了每个配置。之后,我运行了nuget pack,成功创建了一个包,但有一个警告说没有添加一个dll,因为它已经在包中了

然后我尝试编辑csproj,将TargetFrameworks元素和包元数据元素包含到与发布配置对应的PropertyGroup中。编辑后重新加载项目后,名为Dependencies的新组出现在解决方案资源管理器中。我尝试在开发人员命令提示符下使用msbuild/t:pack/p:Configuration=Release创建包,但创建完成时出现错误,即没有包目标。为了解决这个问题,我添加了NuGet.Build.Tasks.Pack包,然后构建了这个包。但当我在Configuration Manager中查看配置时,配置突然损坏


我没想到为多个目标框架设置包会如此痛苦:(正确的方法是什么?此任务有完整的指南吗?

仅在基于SDK的项目中支持
TargetFramework
/
TargetFramework
属性。目前,只有.NET Standard、.NET Core和ASP.NET Core项目的项目模板使用此基于SDK的项目格式。因此,您可以创建创建.NET标准库,然后编辑csproj(右键单击项目>编辑)

一个最简单的例子是:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net45;net461</TargetFrameworks>
  </PropertyGroup>
</Project>

net45;net461
请注意,
Sdk
属性的存在,它提供了许多默认值和额外的生成逻辑。您不需要在文件夹结构中指定任何.cs文件,并且可以使用项目的属性页来设置与NuGet相关的属性


在您的案例中显示dependencies节点的原因是VS 2017为.NET项目提供了两个不同的项目系统—一个是在VS中存在很长时间的经典项目系统,另一个是在新项目系统模型(CPS)上开发的新项目系统它还不支持经典项目系统的所有功能,但具有其他功能,如新的依赖项模型、NuGet属性页以及在加载项目时编辑项目文件的支持。要加载的项目系统的选择取决于是否存在
TargetFramework
TargetFrameworkks
在项目文件中。

谢谢您的解释。那么为.NET Framework设置项目以打包多个目标框架的正确方法是什么呢?目前没有公开的文档。您只需将我发布的代码复制到
xyz.csproj
文件中,然后在visual studio中打开它即可开始。还有因此,从经典的csproj迁移到基于sdk的csproj并没有什么好的迁移故事——它主要是手工编辑csproj文件(我恐怕知道该怎么做)但是它工作得非常好,Newtonsoft.Json也在使用这种方法,甚至使用自定义逻辑对其进行扩展,以允许构建可移植类库。好的,检查其他项目的csproj文件似乎是理解如何准备打包到NuGet包的库的最快方法。我终于解决了我的任务。它可以在经典的.NET框架中切换到新的csproj格式。这对我帮助很大。