我有一個使用命令行調用Visual Studio的devenv.exe構建項目的構建過程(我們稱之爲「引擎」)。我已經知道一段時間了,VS只是用MSBuild構建的,所以我終於開始更新引擎來直接使用MSBuild。但是,我發現MSBuild有一個奇怪的異常。MSBuild沒有將編譯的二進制文件複製到<app> bin
爲了討論,有項目A,B,C和D.項目A是我正在構建的一個主要項目,一個Web應用程序,它依賴於(通過項目引用)其他3個項目。當在VS中手動構建時,A\bin
被組件填充。當與devenv.exe
A\bin
引擎內置時再次填充預期的二進制文件。當內置引擎使用MSBuild時,A\bin
不包含任何內容。但是,B\Release\bin
,C\Release\bin
和D\Release\bin
包含它們的二進制文件,因爲它們使用前兩種構建方法。
這隻發生在一個單一的項目中。這個問題似乎並不涉及依賴項目。
我試圖明確設置MSBuild OutDir
屬性,但它似乎沒有任何影響。
我已經運行了診斷輸出的構建,並且看不到任何明顯的東西(當然,這裏有很多,所以有可能我還沒有找到重要的東西)。
我一直想弄清楚如何看到命令行調用MSBuild VS正在從devenv.exe
運行時,但我似乎無法找到它。
我看過其他幾個SO帖子(here和here),但他們不是同一個問題。
任何人都知道這可能是什麼,或者我可以在哪裏尋找答案或更多診斷信息?
編輯1:用於調用的MSBuild的參數模式如下:
/nologo /target:Compile /property:Configuration=%%BUILDCONFIG%% /maxcpucount
/property:OutDir=%%OUTDIR%%\bin\ /verbosity:diag /detailedsummary "%%PROJPATH%%"
的是,下半部分顯示了我的企圖迫使輸出目錄,以及增強的輸出顯示該過程的更多細節。構建引擎代碼替換爲具有正在構建的項目的適當替換值的「%% TOKEN %%」項。
編輯2:更多的研究和尋找到提供提示後,我決定放棄使用msbuild
代替devenv
的努力。看起來devenv
在準備msbuild
的號召之前還有很多事情要做,如果我沒有完全理解msbuild
的入口,我可能會破壞其他事情。我確實嘗試瞭解是否記錄了從devenv
到msbuild
的呼叫,但它似乎不是。我已經考慮構建一個虛擬的msbuild應用程序來轉儲進入它的命令,並臨時換出實際的msbuild來生成這些診斷信息,但這比現在更值得付出。性能提升不是很大,現在值得追求。
在命令行中,您是否明確提供了配置和平臺? Visual Studio總是這樣。這可能是因爲您的項目文件包含多個配置,並且您擁有在Visual Studio中選擇的其中一個。如果您沒有明確提供Platform/Config,MsBuild將僅使用默認值。 – jessehouwing
是的,請參閱編輯1.應該包括那個... – Peter
您在項目A的%% OUTDIR %%日誌中看到的值是多少,並且對於其中一個項目有效? – Alex