簡體   English   中英

如何使用 Visual Studio 和 MSBuild 進行確定性構建?

[英]How can I build deterministically with both Visual Studio and MSBuild?

我已經到了可以在 Visual Studio 2019 中重復構建並具有確定性構建的地步……與使用 MSBuild v16 在命令行上構建時相同。 不幸的是,使用 VS2019 構建時 output 的程序集與使用 MSBuild 構建時不同。

我理解確定性構建過程的概念,以及編譯器在做出選擇時考慮的無數因素。 我需要做的是弄清楚 Visual Studio 在編譯過程中正在做什么,以便我可以使用 MSBuild 進行復制。 據我所見,Visual Studio 繞過 MSBuild 並直接進入編譯器(這並不容易)。

有沒有人嘗試過這個並取得了成功? 也許您嘗試過並放棄了? 兩者的答案同樣有幫助。

提前致謝。

如何使用 Visual Studio 和 MSBuild 進行確定性構建?

實際上,要構建 C# 項目,VS IDE 調用MSBuild來構建項目。 VS IDE調用MSBuild構建工程,本身與命令行編譯的MSBuild一致。 MSBuild 存在於 VS2019 文件夾中的C:\Program Files (x86)\Microsoft Visual Studio\2019\xxxx\MSBuild\Current\Bin下。

只是VS IDE集成了很多工具。 如果在 VS IDE 中安裝了一些與構建相關的擴展或工具,可能會影響最終構建。 MSBuild(命令行)是一個純編譯工具,VS IDE會調用它來編譯。

--------------------------

首先,我想知道您是否使用VS IDE及其針對 VS 的開發人員命令提示符(存在於 VS2019 IDE 下)單獨構建您的項目。 如果是這樣,我認為您應該確定命令行 arguments 是否與 VS IDE 中的構建參數一致。

首先,請在Extensions --> Manage Extensions下禁用任何第三方擴展,以防它們影響 VS IDE 中的 MSBuild。

然后,確保在構建項目時,應注意每個項目的配置DebugRelease )或平台x64x86Any CPU )。

然后你應該在 MSBuild 命令行中執行這些操作:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx

確保構建說明是一致的。

--------------------------

、在另一個單代理中使用VS2019的Build Tool時(可以不用VS IDE單獨安裝),如果是這樣,請確保其版本與VS IDE相同。(Build Tool版本v16.xxx相同如 VS IDE 版本v16.xxx )和不同版本的 MSBuild 的版本會略有不同,所以要保持一致。

Actually , MSBuild builds c # projects using csc.exe to compile files, so both VS IDE and MSBuild are consistent for c# files. 使用csc的不同編譯器沒有問題。

另外,要查看更多細節:可以通過這種方式查看詳細的構建日志:

VS IDE 中

Tools --> Options --> Projects and Solutions --> Build and Run --> 設置MSBuild project build output verbosity Detailed信息。

MSBuild 中

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx -v:detailed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM