簡體   English   中英

MSBuild和多個Delphi版本

[英]MSBuild and multiple Delphi versions

我有一個項目,我需要構建兩個可執行文件:一個在Delphi XE2下,一個在XE3下。 我有一個構建腳本來構建每個版本(即XE2的一個腳本和XE3的一個腳本)。

如果我運行我運行的IDE的最后一個版本的構建腳本,一切運行良好(即運行Delphi XE2,構建應用程序,運行XE2構建腳本)。

但是,如果我運行構建腳本只運行不同版本的IDE,我會在應用程序啟動后立即獲得AV(即運行Delphi XE2,構建應用程序,運行XE3構建腳本)。

看起來好像IDE正在緩存/修改構建腳本,我需要恢復我想要構建的版本的相應數據。 我用.dproj嘗試過這個,但沒有運氣。

或者它可能是加載表單資源 - 兩個版本都顯示錯誤,因為如果IDE啟動時不存在屬性。 如果是這樣,有沒有一個簡單的方法來保持所有.fmx文件的多個版本?

這是一個示例構建腳本:

set path=%path%;c:\Windows\Microsoft.NET\Framework\v3.5
set path=%path%;c:\Program Files (x86)\Embarcadero\RAD Studio\10.0
set path=%path%;c:\Documents and Settings\All Users\Documents\RAD Studio\10.0
set BDS=c:\Program Files (x86)\Embarcadero\RAD Studio\10.0
set FrameworkDir=c:\Windows\Microsoft.NET\Framework\
set FrameworkVersion=v3.5

set failed=false
cd \myprogs\monkeystyler
msbuild monkeystyler.dproj /t:build /p:config=full||set failed=true
cd build
if not %failed%==true goto Done

echo ****FAILED TO BULD MONKEYSTYLER
****
Pause
exit

:done

我們來看看XE3腳本中的這一行:

set path=%path%;c:\Program Files (x86)\Embarcadero\RAD Studio\10.0

我的猜測是你在XE2腳本中遵循以下內容:

set path=%path%;c:\Program Files (x86)\Embarcadero\RAD Studio\9.0

此時您的路徑變量如下所示:

set path=%path%;c:\Program Files (x86)\Embarcadero\RAD Studio\10.0;c:\Program Files (x86)\Embarcadero\RAD Studio\9.0

因此第二個腳本失敗,因為第一個腳本的路徑出現得更早。

解決此問題的優雅方法是在腳本中使用setlocalendlocal將它們彼此隔離。

setlocal
set path=%path%;c:\Windows\Microsoft.NET\Framework\v3.5
set path=%path%;c:\Program Files (x86)\Embarcadero\RAD Studio\10.0
.....
endlocal

修復它的hacky方法是設置這樣的路徑:

set path=c:\Program Files (x86)\Embarcadero\RAD Studio\10.0;%path%

請使用優雅的方法!


你還應該使用pushd和popd來隔離每個腳本的目錄更改。

如果這不能解決所有問題,請提供更多信息。 首先,錯誤消息非常有用。

您運行的最后一個IDE將更新<user>\\AppData\\Roaming\\Embarcadero\\BDS\\<version>文件夾中的EnvOption.proj。

這包含所有搜索路徑等。

此文件間接包含在您的項目中。 因此,如果您運行說XE2's IDE然后編譯您的XE3應用程序,您將得到錯誤的路徑。

您可能希望禁用它並在每個項目的dproj文件中明確指定搜索路徑。

eg msbuild myproj.proj /p:ImportEnvOptions=false

這是我最好的猜測。 對不起,如果它已經晚了5年。 我剛剛遇到類似的問題!

祝一切順利

史蒂夫

我又回到了懷疑它是表單文件資源。

我的理論是,使用IDE的“錯誤”版本保存的表單文件,當使用不同版本構建的項目嘗試加載它時,由於應用程序嘗試加載屬性而不是該版本有售。

為了測試這個,我在IDE的一個版本(在這種情況下是XE3)中成功編譯了項目,進行了自動構建並測試了應用程序運行(確實如此)。

然后我為項目加載了一個.fmx文件,並向表單添加了一個不存在的屬性。

構建和應用程序失敗與以前相同。

刪除添加的屬性,現在構建成功。

我現在需要做的所有(!)是編寫一些代碼來解析表單文件並刪除我正在構建的版本的任何不存在的屬性。

暫無
暫無

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

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