天天看點

MSBuild 指令行 并行編譯項目,出現生成dll檔案占用1.編譯工具版本VS2015 2.項目結構 3.編譯腳本4.導緻出現的警告5./maxcpucount 參數解釋6.解決方案

1.編譯工具版本VS2015 

使用VS 2015,裝完VS 2015 是不包含MSBuild 需要下載下傳安裝 mu_microsoft_build_tools_2015_x86_x64_6846132.exe(Microsoft Build Tools 2015)

2.項目結構

MSBuild 指令行 并行編譯項目,出現生成dll檔案占用1.編譯工具版本VS2015 2.項目結構 3.編譯腳本4.導緻出現的警告5./maxcpucount 參數解釋6.解決方案

這裡要注意,其他項目裡引用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