2014-06-06 36 views
1

我試圖用自定義MSBuild目標來定製我的解決方案,該目標修改了AssemblyVersionAssemblyFileVersion程序集屬性,並放置了來自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和命令行構建成一致。

+0

msbuild和Visual Studio 2010之間有一些差異。 msbuild可能會找到您的解決方案所依賴的項目,這些項目不在sln文件中指定...此外,msbuild無法構建安裝項目。怎麼樣使用csproj文件的「PreBuildEvent」? –

+0

@BernhardHiller - 我理解這種差異,但是關於C#項目的構建順序,我預料它會是一樣的......但我錯了。我不喜歡使用該事件,因爲它只支持命令行語法,而且我已經使用MSBuild XML編寫了所有的東西。 –

回答

0

MSBuild和VS之間有很多不同。其中一個,很多.targets文件,包括.NET/VS中的文件,都有Condition="'$(BuildingInsideVisualStudio)' == 'true'"。此外,VS在生成解決方案的依賴關係樹時採用了許多快捷方式。

至於你的問題:我不喜歡重寫像BeforeBuild目標的做法。如果有兩個人做了這個?後者會覆蓋前者。相反,使用的MSBuild 3和更高的BeforeTargets功能 - 在你的情況,你只需要你的目標爲:

<Target Name="VersionTag" BeforeTargets="BeforeBuild">(...) 

...也許這將解決您的問題,以及。

如果沒有,你可以增加MSBuild日誌級別(Tools => Options => Projects and Solutions => Build and Run),然後日誌會告訴你更多。

+0

如果一個MSBuild階段晚於VS內的其他階段發生,我認爲它不會解決。但我會接受你的答案。無論如何,我沒有更好的。謝謝你的答案,對於$(BuildingInsideVisualStudio)條件,我不知道。 –