如何在本地进行确定性构建ContinuousIntegrationBuild标志?

问题描述

当我尝试使用NuGet软件包资源管理器发布软件包时,看到以下警告:

Non-Deterministic

确定性(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>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...