我这样做了:
<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时,我可以看到rev和proj在目标CreateProperties和同一个msbuild文件中的其他目标中都是活动的。
但是......当我在这个文件中使用另一个导入的msbuild文件时,就像它们不存在一样。专业人士是空的。知道为什么吗?
答案 0 :(得分:3)
您必须将属性“传递”到“helper”proj文件。 (“SomeCommonLogic.proj”是我下面示例中的“帮助”文件)
注意我是如何通过下面示例中的“Properties”将属性从“outside”proj文件传递给“helper”proj文件。
<Target Name="SomeCommonLogicTarget">
<Message Text=" " />
<Message Text=" " />
<MSBuild Projects="..\..\MSBuildCommonLogic\SomeCommonLogic.proj" Targets="SomeTargetInTheHelperFile" Properties="Configuration=$(Configuration);RevisionNumber=$(SubVersionRevision)" />
</Target>
此外,“帮助”文件像相对路径一样 NOT 您必须将任何相关文件转换为完整路径。
<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)" />