簡體   English   中英

Visual Studio(2010)內部版本與MSBuild從命令行的不同行為

[英]Different behavior of Visual Studio (2010) build vs MSBuild from command line

我正在嘗試使用自定義MSBuild目標來自定義我的解決方案,該目標將修改AssemblyVersionAssemblyFileVersion程序集屬性,並從CI放入內部版本號,或者如果我們在本地計算機上進行構建,則僅增加當前值之一。 我已將該自定義目標放置為BeforeBuild標准目標的依賴項,因此它應在每次構建之前執行:

  <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和VS之間有很多區別。 例如,許多.target文件,包括.NET / VS隨附的文件,都帶有Condition="'$(BuildingInsideVisualStudio)' == 'true'" 此外,VS在生成解決方案的依賴關系樹時采取了許多捷徑。

至於您的問題:我不喜歡覆蓋諸如BeforeBuild目標的做法。 如果有2個人這樣做,該怎么辦? 后者將覆蓋前者。 而是使用MSBuild 3和更高版本的BeforeTargets功能-在您的情況下,您只需將目標設置為:

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

...也許這也可以解決您的問題。

如果不是,則可以提高MSBuild日志記錄級別(工具=>選項=>項目和解決方案=>生成並運行),然后該日志將告訴您更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM