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

Visual studio 如何在本地进行确定性构建(ContinuousIntegrationBuild标志)?,visual-studio,visual-studio-2019,nuget-package,roslyn,.net-standard,Visual Studio,Visual Studio 2019,Nuget Package,Roslyn,.net Standard,当我尝试使用NuGet package Explorer发布包时,我看到以下警告: 确定性(dll/exe):非确定性 确保为CI生成启用了以下属性 您至少使用了2.1.300 SDK: <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild> true 但是,当我将该属性添加到PropertyGroup(如上所述)时,VS2019会异常异常,我需要按ctrl+alt+delete来关闭它 根据属性名

当我尝试使用NuGet package Explorer发布包时,我看到以下警告:

确定性(dll/exe):非确定性
确保为CI生成启用了以下属性
您至少使用了2.1.300 SDK:

<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
true
但是,当我将该属性添加到
PropertyGroup
(如上所述)时,VS2019会异常异常,我需要按ctrl+alt+delete来关闭它

根据属性名,它是
,但这似乎没有任何作用

那么如何让确定性构建正常工作?

Visual Studio 2019,v16.7.1

.Net SDK 3.1.401(LTS)

我基本上在以下方面找到了答案:

虽然在.NET SDK项目中默认启用确定性生成,但在生成服务器上设置了一个额外的属性ContinuousIntegrationBuild,以规范化存储的文件路径。在本地开发期间不应启用这些功能,否则调试器将无法找到本地源文件


真的

一个更简单的答案是不要弄乱
.csproj
文件(呃!),并通过CI脚本中的命令行执行此操作

/p:ContinuousIntegrationBuild=true
参数添加到
dotnet-pack
命令中

dotnet pack 
    -c $env:CONFIGURATION 
    /p:ContinuousIntegrationBuild=true 
    -p:PackageVersion=$env:APPVEYOR_BUILD_VERSION
(为了便于阅读,我把它分成了多行)

注意:
--no build
参数不在这里。我们需要重新建造这个。或者在此之前将该参数添加到构建步骤

这是。因此,当我处于
release
模式时,我将库打包到一个nuget中并发布它


保持你的
.csproj
文件干净整洁(这很难查找和维护)。

你能发布一些你看到的错误吗?就目前情况而言,这个问题是无法回答的。您提到的确定性选项是关于编译器是确定性的(官方文档)。在任何.NET核心项目中,此标志默认为启用状态,因此在项目文件中指定它将不会起任何作用。@JonathonMarolf:我已经发布了我看到的错误。当您在本地版本上启用标志时,Visual Studio在版本上冻结,需要强制关闭。@BlueRaja DannyPflughoeft默认值。由VS v16.7.1为C#console应用程序生成的csproj在顶部的
下有
true
,并且在本地构建良好。因此,我想您的项目文件中肯定还有其他一些不同之处。当您从命令行构建时会发生什么?我相信Clair的属性只能在sdk风格的项目(为.NET核心项目生成的那种)中工作。设置此变量对我来说没有什么区别:当使用NuGet package Explorer查看包时,我仍然收到相同的警告。尝试将其始终设置为
true
(作为测试)以及使用自定义变量(如
TF\u BUILD
)从cmdline编译。对我来说,使用ContinuousIntegrationBuild也不起作用
dotnet pack 
    -c $env:CONFIGURATION 
    /p:ContinuousIntegrationBuild=true 
    -p:PackageVersion=$env:APPVEYOR_BUILD_VERSION