2014-01-09 19 views
1

我做這樣的:MSBUILD createproperty

<Target Name="CreateProperties">     
    <GetAssemblyFileVersionTask strFilePathAssemblyInfo="$(AssemblyInfo)"> 
     <Output TaskParameter="strAssemblyFileVersion" PropertyName="strAssemblyFileVersion" /> 
    </GetAssemblyFileVersionTask> 
    <Message Text="AssemblyFileVersion = $(strAssemblyFileVersion)" /> 

    <CreateProperty 
     Value="$([System.Text.RegularExpressions.Regex]::Replace($(strAssemblyFileVersion), '^(\d+)\.(.+)\.\d+$', '$1_$2'))">   
     <Output 
      TaskParameter="Value" 
      PropertyName="rev" /> 
    </CreateProperty> 


    <CreateProperty 
     Value="$(ProjName)"> 
     <Output 
      TaskParameter="Value" 
      PropertyName="proj" /> 
    </CreateProperty> 
</Target> 

當我運行的MSBuild我可以看到,無論轉速和凸出都在同一個文件的MSBuild目標CreateProperties和我的其他目標裏面活着。

但是....當我使用另一個在這個文件中importet的msbuild文件它就像他們不存在。合適的人是空的。任何想法爲什麼?

回答

3

你必須「傳遞」屬性到「助手」proj文件。 (「SomeCommonLogic.proj」是我下面例子中的「幫手」文件)

請注意,我如何通過下面的示例中的「屬性」將屬性從「外部」proj文件傳遞到「助手」proj文件。

<Target Name="SomeCommonLogicTarget"> 
    <Message Text=" " /> 
    <Message Text=" " /> 
    <MSBuild Projects="..\..\MSBuildCommonLogic\SomeCommonLogic.proj" Targets="SomeTargetInTheHelperFile" Properties="Configuration=$(Configuration);RevisionNumber=$(SubVersionRevision)" /> 
    </Target> 

此外, 「幫助」 文件不像相對路徑。
您必須將任何相關文件轉換爲完整路徑。

<ItemGroup> 
    <WorkingCheckoutItemGroupForParameterPassing Include=".\MyFile.txt" /> 
</ItemGroup> 
<CreateProperty Value="%(WorkingCheckoutItemGroupForParameterPassing.fullpath)"> 
    <!-- Use the .fullpath value to get the full path to push it into the xsl(document function) --> 
    <Output TaskParameter="Value" PropertyName="WorkingCheckoutFullPath" /> 
</CreateProperty> 
<Message Text=" WorkingCheckoutFullPath = $(WorkingCheckoutFullPath)" /> 
+2

請注意,使用/ p定義的屬性是'global',不需要傳遞。創建的屬性(甚至全局屬性用CreateProperty重寫)仍然需要像通過一樣傳遞。這讓我感到頭痛。很好的答案! –