1.編譯工具版本VS2015
使用VS 2015,裝完VS 2015 是不包含MSBuild 需要下載下傳安裝 mu_microsoft_build_tools_2015_x86_x64_6846132.exe(Microsoft Build Tools 2015)
2.項目結構
這裡要注意,其他項目裡引用Common項目的,是通過dll檔案夾裡的Common.dll,這是導緻并行編譯的原因
3.編譯腳本
compile.bat
set msbuild_program_dir=C:\Program Files (x86)\MSBuild\14.0\Bin\
set compile_model=Release
set sln_file_dir=.\Test.sln
set message="Compiling WPF"
Echo %message%
"%msbuild_program_dir%\MSbuild.exe" /maxcpucount /p:Configuration=%compile_model% %sln_file_dir%'
set message="completed."
Echo %message%
注意上面的 /maxcpucount,這個并行編譯,同時編譯多個項目的設定參數
4.導緻出現的警告
_CopyAppConfigFile:
[exec] 正在将檔案從“app.config”複制到“dll檔案夾\Common.dll.config”。
[exec] CopyFilesToOutputDirectory:
[exec] 正在将檔案從“obj\Release\Common.dll”複制到“dll檔案夾\Common.dll”。
[exec] 2>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(3813,5): warning MSB3026: 未能将“obj\Release\Common.dll”複制到“dll檔案夾\Common.dll”。1000 毫秒後将開始第 1 次重試。檔案“dll檔案夾\Common.dll”正由另一程序使用,是以該程序無法通路此檔案。 [D:\Test\Common\Common.csproj]
5./maxcpucount 參數解釋
指定生成時要使用的最大并發程序數。 如果不包含此開關,則預設值為 1。 如果包含此開關而沒有指定值,MSBuild 将使用計算機中的處理器總數作為其值
如:
MSbuild.exe test.csproj /maxcpucount:3 表示使用三個 MSBuild 程序進行生成,這允許同時生成三個項目,編譯時,會在任務管理器裡出現在運作的 MSBuild.exe
MSbuild.exe test.csproj /maxcpucount 表示将使用計算機中的處理器總數作為其值
更多詳情用 MSBuild 并行生成多個項目
6.解決方案
1>引用Common.dll 的項目改成 引用Common項目,即 dll引用改成對應的 項目引用
2>去掉 /maxcpucount 編譯參數或者 設定/maxcpucount:1