我試圖用自定義MSBuild目標來定製我的解決方案,該目標修改了AssemblyVersion
和AssemblyFileVersion
程序集屬性,並放置了來自CI的內部編號或僅增加當前值如果我們正在本地機器上建立一個。我已經把那自定義的目標作爲BeforeBuild
標準目標的依賴關係,所以應該每次構建前執行:從命令行構建vs MSBuild的不同行爲
<Target Name="BeforeBuild" DependsOnTargets="VersionTag" />
而且我遇到了以下問題。當我從命令行構建時,情況良好,AssemblyInfo.cs
文件在構建之前正在修改,並且新版本號來到新構建的程序集。實際建成後
但是,當我從Visual Studio中建立,組件越來越老的版本號和AssemblyInfo.cs
文件被修改。輸出窗口顯示是這樣的 - 請注意,編譯警告和「編譯完成」消息「建設啓動」消息之前被顯示:
------ Rebuild All started: Project: CommonModel, Configuration: Debug Any CPU ------
C:\Applications\Domain\CommonModel\History\CommonHistory.cs(7,42): warning CS0108: 'Domain.CommonModel.History.CommonHistory.Parent' hides inherited member 'Domain.CommonModel.Common.Parent'. Use the new keyword if hiding was intended.
C:\Applications\Domain\CommonModel\Common.cs(36,35): (Related location)
Compile complete -- 0 errors, 14 warnings
Build started 6/5/2014 6:40:00 PM.
CoreClean:
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.dll.config".
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.dll".
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.pdb".
. . .
明知VS使用的MSBuild在我期待相同的背景這兩種構建的行爲,至少是核心事件的順序。所以現在我有點困惑,如果有機會把VS和命令行構建成一致。
msbuild和Visual Studio 2010之間有一些差異。 msbuild可能會找到您的解決方案所依賴的項目,這些項目不在sln文件中指定...此外,msbuild無法構建安裝項目。怎麼樣使用csproj文件的「PreBuildEvent」? –
@BernhardHiller - 我理解這種差異,但是關於C#項目的構建順序,我預料它會是一樣的......但我錯了。我不喜歡使用該事件,因爲它只支持命令行語法,而且我已經使用MSBuild XML編寫了所有的東西。 –