如何解决如何在本地进行确定性构建ContinuousIntegrationBuild标志?
当我尝试使用NuGet软件包资源管理器发布软件包时,看到以下警告:
确定性(dll / exe):非确定性
确保为CI构建启用以下属性
并且您至少使用2.1.300 SDK:<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
但是,当我将该属性添加到PropertyGroup
(如here所述)时,VS 2019变得异常严重,我确实需要按ctrl + alt + delete将其关闭。
根据this page,属性名称为<Deterministic>
,但这似乎什么都没做。
所以如何使确定性构建工作?
Visual Studio 2019,v16.7.1
.Net SDK 3.1.401(LTS)
解决方法
一个更简单的答案是不要弄乱 .csproj
文件(糟糕!)并通过命令行在 CI 脚本中执行此操作。
将 /p:ContinuousIntegrationBuild=true
参数添加到 dotnet pack
命令。
dotnet pack
-c $env:CONFIGURATION
/p:ContinuousIntegrationBuild=true
-p:PackageVersion=$env:APPVEYOR_BUILD_VERSION
(把这些都写成一行。为了可读性,我已经多行了)
注意:--no-build
参数不在此处。我们需要再次构建它。或者您在此之前将该参数添加到构建步骤。
这是taken from an example CI file I use。因此,当我处于 release
模式时,我会将库打包到 nuget 中并发布。
保持内容干净并远离您的 .csproj
文件(这很难理解和维护)。
我基本上在blogpost中找到了答案:
虽然在.NET SDK项目中默认启用了确定性生成,但是还有一个额外的属性ContinuousIntegrationBuild可以在生成服务器上设置以规范化存储的文件路径。在本地开发人员期间不应启用这些功能,否则调试器将无法找到本地源文件。
<PropertyGroup Condition="'$(TF_BUILD)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。