2017-08-09 74 views
1

我在csproj中有以下Import。 如何在道具的這一點找到Variable的價值?瞭解msbuild:打印變量值

<Import Project="<path_to_abc>\$(Variable)\abc.props>" 
     Condition=" '$(Variable)' != '' "  
/> 

我得到建立自己的錯誤是:

can not find props files : `<path_to_abc>\\abc.props` 

我怎麼能看到的Variable這裏的價值? 如果我把Message放在csproj上面Import,我應該給什麼目標依賴項?

<Target Name="PrintInfo" BeforeTargets="BeforeBuild"> 
    <Message Text="'$(Variable)' $(Variable.length) " /> 
</Target> 

給我'' 0

但是,是因爲BeforeBuild

msbuild是如何工作的? 是否在先來先處理之前和之後處理所有屬性? 然後,如果它處理Targets,它是否打印當前時間的值?

如何在評估道具時看到放入了什麼值?

回答

1

令人遺憾的是,導入目前尚未記錄,即將發佈的MSBuild 15.3版本及其二進制日誌記錄功能即將改變。

一個調用的MSBuild使用/flp:Verbosity=diagnostic會發出財產重新分配事件的msbuild.log文件是這樣的:

0>Property reassignment: $(Foo)="bar" (previous value: "foo") at /Users/martin.ullrich/tmp/test.proj (10,5) 

日誌隨後將包含一個Initial Properties名單與項目充分評估屬性(包括進口)。無論是在條件或項目路徑 - -

明白,報表屬性定義和import語句,以便這樣處理<Import>使用性質是至關重要它將使用在該屬性的值時刻。

還有其他幾個重要方面:

  • 屬性組處理以前項目組和項目定義組。即使在所有進口項目中! (因此與一個條件的<ItemGroup>將看到屬性的值定義/然後導入)
  • 目標條件是在所述目標被認爲是用於執行,並可以通過兩者的影響的時間來評價所有導入的項目文件和在已經運行的其他目標中發生的修改。