簡體   English   中英

從Visual Studio構建時,在運行任何其他內容之前使目標運行

[英]Getting a Target to run BEFORE anything else runs when building from Visual Studio

我正在嘗試獲得一次性昂貴的目標,僅在構建某個頂級項目(具有許多依賴項)時運行。

從普通的msbuild /命令行構建中獲得這個工作沒有問題。 我通過項目中的設置和InitialTargets執行此操作,或者使用

<BeforeBuild />。

棘手的部分是使用Visual Studio。 當我從VS構建相同的項目時。 VS甚至在調用我的.csproj之前運行依賴項,因此我的目標(影響其他項目的構建方式)在它們已經構建之前不會運行。

在調用依賴項之前是否有某種程度迫使VS運行目標?

我目前正在解決這個問題,通過使用以下方法從最低級別的項目中運行相同的高成本目標(得到的總是......)

條件=“$(BuildingInsideVisualStudio)”

關於如何“正確”完成這項工作的任何想法? 再一次,我正在尋找一個可以在VS上工作的解決方案。

執行此操作的唯一方法(如果我理解這個問題)是創建一個虛擬項目,您告訴VS首先構建,它可以執行任何您想要的操作。 如果你給它一個.csproj擴展名和Build目標,VS將接受幾乎任何MSBuild文件。

Visual Studio使用in proc編譯器來幫助構建過程的UX。 由於這一點,VS和MSBuild之間可能存在一些差異。 嘗試在項目文件中將屬性UseHostCompilerIfAvailable設置為false。 這將迫使VS使用MSBuild進行構建。 缺點是Visual Studio內部的性能。

您可以在.csproj(或.vbproj)文件中使用以下拼寫。

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

為什么不覆蓋<Target Name="BeforeBuild" />目標? 這將在實際構建項目之前執行(因為Build目標依賴於BeforeBuild )。 Visual Studio正在調用Build目標(或Rebuild),因此覆蓋.csproj中的目標將導致首先調用它。

除非你想要比msbuild更早做某事?

暫無
暫無

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

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