簡體   English   中英

如何從 Delphi 執行 MSBuild?

[英]How to execute MSBuild from Delphi?

我正在致力於自動化我們軟件的構建/部署過程。 其中一個主要部分是執行msbuild來編譯多個 Delphi 項目。

遵循諸如this之類的眾多資源,我可以從RAD Studio命令行成功地做到這一點(它只是調用rsvars.bat來設置一些環境變量)。 但是,當嘗試自動執行此批處理文件和來自 Delphi 的msbuild命令時,我無法弄清楚如何繼續。

問題的關鍵在於批處理文件和實際的msbuild命令是兩個完全獨立的命令——盡管它們需要在同一環境下一起運行。 我發現這個問題有些相關,但我沒有看到我的場景的明確答案。

在首先使用rsvars.bat的環境變量准備它時,如何從 Delphi 執行msbuild

如此答案所示,您可以使用命令行參數運行cmd.exe本身來執行命令。

根據cmd.exe 文檔

語法

cmd [/c|/k] [/s] [/q] [/d] [/a|/u] [/t:{<B><F>|<F>}] [/e:{on|off}] [/f:{on|off}] [/v:{on|off}] [<String>]

參數

/c
執行字符串指定的命令,然后停止。
...
<字符串>
指定要執行的命令。
...

備注

  • 使用多個命令

    要對 <String> 使用多個命令,請用命令分隔符&&將它們分開,並用引號將它們括起來。 例如:

     "<Command>&&<Command>&&<Command>"
  • 處理引號

    如果指定/c/k ,則 cmd 處理String的其余部分,並且僅在滿足以下所有條件時才保留引號:

    • 您不使用/s

    • 您只使用一組引號。

    • 不要在引號內使用任何特殊字符(例如: & < > ( ) @ ^ | )。

    • 您可以在引號內使用一個或多個空白字符。

    • 引號內的字符串是可執行文件的名稱。

    如果不滿足前面的條件,則通過檢查第一個字符以驗證它是否為左引號來處理String 如果第一個字符是左引號,則它會與右引號一起被刪除。 保留引號后的任何文本。

因此,請嘗試使用CreateProcess()ShellExecute/Ex()運行具有以下參數的cmd.exe實例:

cmd.exe /C ""<path>\rsvars.bat" && msbuild "<path>\project" <msbuild parameters> ..."

或者,您可以讓您的應用程序加載rsvars.bat並解析它定義的值(或僅在您自己的代碼中定義值),然后使用CreateProcess()執行msbuild ,將所需的環境變量傳遞給其lpEnvironment參數。 這樣,您根本不需要實際執行rsvars.bat

另一種有效的方法是將兩個命令放在另一個新的批處理文件中。 這也允許您使用相同的環境構建多個項目。 例如DoBuild.bat具有以下內容:

call "C:\Program Files (x86)\Embarcadero\Studio\17.0\bin\rsvars.bat"
msbuild "<path>\MyProject.dproj"
msbuild "<path>\MyOtherProject.dproj"
msbuild "<path>\YetAnotherProject.dproj"

然后,只需執行您的批處理文件:

Cmd.exe /K "<path>\DoBuild.bat"

暫無
暫無

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

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