“dotnet pack”使用发布配置
dotnet pack
命令将代码打包到 NuGet 包中,现在默认使用 Release
配置而不是 Debug
配置。
旧行为
以前,dotnet pack
使用 Debug
配置,除非显式指定配置或 PackRelease
设置为 true
。
.NET 7 中已添加 PackRelease
属性作为此中断性变更的路径。 以前,可以将 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
环境变量设置为在属于 Visual Studio 解决方案的项目中使用 PackRelease
。
新行为
如果使用 .NET 8 SDK 或更高版本进行开发,那么 dotnet pack
默认对所有项目使用 Release
配置。 如果有 CI/CD 脚本、测试或代码,并且已将 Debug
硬编码到输出路径中,则此更改可能会中断工作流。 此外,除非显式指定了 Debug
配置(例如,使用 dotnet pack --configuration Debug
),否则将无法调试打包的应用。
dotnet pack
可以同时打包多个目标框架名字对象 (TFM)。 如果项目面向多个版本,并且针对不同的目标具有不同的 PackRelease
值,则可能存在冲突,即一些 TFM 打包 Release
配置,而另一些 TFM 打包 Debug
配置。
对于解决方案中的项目:
如果给定解决方案文件,
dotnet pack
可以打包 Visual Studio 解决方案中的所有项目。 对于解决方案中的每个项目,如果未定义PackRelease
的值,则将其隐式设置为true
。 为了使dotnet pack
确定要使用的正确配置,解决方案中的所有项目都必须就其PackRelease
值达成一致。此更改可能会导致
dotnet pack
的性能下降,尤其是对于包含多个项目的解决方案。 为了解决此问题,引入了一个新的环境变量DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
。不再识别
DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
环境变量。
引入的版本
.NET 8 预览版 1
中断性变更的类型
更改原因
大多数情况下,在创建包时,你希望优化代码,并且可以通过排除调试信息来使包更小。
已删除 DOTNET_CLI_ENABLE_PACK_RELEASE_FOR_SOLUTIONS
环境变量,因为它启用的行为现在是默认行为,不再需要精细控制。
建议的操作
若要完全禁用新行为,可以将
DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
环境变量设置为true
(或任何其他值)。 此变量同时影响dotnet publish
和dotnet pack
。若要显式指定
Debug
配置用于打包,请将-c
或--configuration
选项与dotnet pack
一起使用。如果 CI/CD 管道由于硬编码的输出路径而中断,请将路径更新为
Release
而不是Debug
,使用DOTNET_CLI_DISABLE_PUBLISH_AND_PACK_RELEASE
环境变量禁用新行为,或指定应使用Debug
配置。如果要打包解决方案,但解决方案由于一个或多个项目显式设置
PackRelease
的值而损坏,则应在每个项目中将PackRelease
显式设置为false
:<PropertyGroup> <PackRelease>false</PackRelease> </PropertyGroup>
如果要打包解决方案且性能已下降,可以将
DOTNET_CLI_LAZY_PUBLISH_AND_PACK_RELEASE_FOR_SOLUTIONS
环境变量设置为true
(或任何其他值)以删除回归。 如果使用此变量并且有任何项目定义了PackRelease
,则所有项目都必须定义它,或者可以使用 Directory.Build.Props 文件。 此变量同时影响dotnet publish
和dotnet pack
。