首页 > 解决方案 > 项目属性中缺少包选项卡

问题描述

尝试创建 nuget 包以上传到我们自己的 nuget 服务器,并希望消除创建和编辑 nugspec 文件的手动过程。我读过的所有内容都说可以从项目文件中提取设置(如果使用包引用)。并且设置存在于项目属性窗口的“包”选项卡上。但是那个标签不存在。

使用 vs 2019,.NetFramework 4.7.2,项目是一个库,并已迁移到包参考。我采用了一个现有项目,右键单击引用,并使用了迁移选项。包标签不存在

我还将 nuget 包管理器设置为默认为 packageReference,并创建一个新的类库。包标签也不存在

所需的包(当使用带有包参考的非 SDK 样式时)nuget.build.tasks.pack 已添加到两个项目提及的参考中

任何帮助,将不胜感激

标签: packagenuget

解决方案


包选项卡仅适用于 SDK 样式项目。非 SDK 样式项目在 Visual Studio 中使用不同的项目系统,该系统不包含该项目属性选项卡。新项目系统(在 github 上,旧项目系统是闭源的)最初看起来与旧项目系统相同,但慢慢地它们开始出现分歧。解决方案资源管理器中的 Reference/Dependencies 节点就是一个明显的示例,项目属性窗口中的 Package 选项卡也是如此。

要创建 pack 使用的 MSBuild 属性,您需要手动将项目文件编辑为 XML。在 Visual Studio 中,您需要在解决方案资源管理器中右键单击项目,选择“卸载项目”,现在当您单击项目或右键单击并选择编辑时,您将看到项目 XML。完成后,再次右键单击项目并选择重新加载项目。或者,使用 Visual Studio 之外的文本或 XML 编辑器对其进行编辑,Visual Studio 将检测到更改并在您返回 alt-tab 时提示您重新加载项目。

但是,我的建议是将您的非 SDK 样式项目转换为 SDK 样式项目。“标准”类库项目工作正常,我不知道有任何缺点(除非您团队中的一些开发人员仍在使用 Visual Studio 2015 或更早版本),因为非 SDK 样式项目已经在使用 PackageReference。在 SDK 样式项目中以 .NET Framework 为目标时,某些其他项目类型可能具有有限的 Visual Studio 体验。其他项目类型可能根本不兼容 SDK 风格的项目。但是,大多数创建 NuGet 包的人都是使用标准类库项目进行的,这应该没有任何问题。

有一个“不支持”的工具try-convert可以将非 SDK 风格的项目转换为 SDK 风格。就个人而言,我只是删除 csproj,创建一个空目录,dotnet new classlib在控制台上运行,将 csproj 移动到我现有项目的目录,重命名项目文件,然后删除那个临时/空目录。如果您.cs的项目中除了需要在 csproj 中显式条目的文件之外还有其他任何内容,如果您对 msbuild 感到满意,请手动编辑 csproj,否则在 Visual Studio 中加载项目并使用解决方案资源管理器和属性窗口。

有些人认为 SDK 风格的项目仅适用于 .NET Core 或 .NET Standard。这不是真的,但不幸的是,Visual Studio 新项目模板给人留下了这样的印象。您将需要创建面向 .NET 5、.NET Standard 或 .NET Core 的类库项目。但是一旦创建了 csproj,编辑 csproj(对于 SDK 样式项目,不再需要卸载项目)并更改<TargetFramework>net5.0</TargetFramework><TargetFramework>net472</TargetFramework>. SDK 风格项目的另一个优点是它很容易实现多目标,这是一种将项目慢慢现代化到更新的运行时的有用技术。在 XML 元素名称中添加一个s以使其复数,并将额外的目标框架添加为分号分隔的列表<TargetFrameworks>net472;net5.0</TargetFrameworks>TargetFramework当在和之间切换时TargetFrameworks, Visual Studio 应该会提示你重新加载项目,但我发现它仍然有一些问题。所以我建议关闭解决方案并再次打开它,那么一切都应该很好。


推荐阅读