我正在开发一个库,并希望为多个版本的.NET Framework创建NuGet包。我没有找到任何带有完整行动清单的文章。
我尝试的第一个选项是创建一系列配置,如Release_Net45等。然后我编辑了csproj以更正每个配置的输出目录(lib / net45等)和目标框架版本。然后我构建了每个配置。之后我运行nuget pack并成功创建了一个包含一个dll的警告,因为它已经在包中...
然后我尝试编辑csproj以将TargetFrameworks元素和包元数据的元素包含到与Release配置对应的PropertyGroup中。在编辑完重新加载项目后,解决方案资源管理器中出现了一个名为Dependencies的新组。我尝试使用msbuild / t:pack / p:Configuration = Release在Developer命令提示符下创建包,但是它已经完成,但是没有包目标。为了修复它,我添加了NuGet.Build.Tasks.Pack包,然后构建了包。但是当我在Configuration Manager中查看它们时,我的配置突然变坏了。
我没想到为多个目标框架设置一个包会很痛苦:(这样做的正确方法是什么?这个任务有完整的指南吗?
答案 0 :(得分:4)
TargetFramework
/ TargetFrameworks
属性仅在基于SDK的项目中受支持。目前,只有.NET Standard,.NET Core和ASP.NET Core项目的项目模板使用这种基于SDK的项目格式。因此,您可以创建.NET标准库,然后编辑csproj(右键单击项目>编辑)。
最小的例子是:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;net461</TargetFrameworks>
</PropertyGroup>
</Project>
注意Sdk
属性的存在,它提供了许多默认值和额外的构建逻辑。您不需要在文件夹结构中指定任何.cs文件,并且可以使用项目的属性页来设置与NuGet相关的属性。
在您的案例中显示依赖关系节点的原因是因为VS 2017为.NET项目提供了两个不同的项目系统 - 经典的一个已经在VS中很长一段时间,而一个新项目正在一个新项目上开发系统模型(CPS)不支持经典项目系统的所有功能,但还有其他功能,如新的依赖模型,NuGet的属性页以及在加载项目时支持编辑项目文件。选择要加载的项目系统取决于项目文件中是否存在TargetFramework
或TargetFrameworks
。