是否可以使用默认的 MSBuild 技术来访问项目组中的列表作为 msbuild 中的属性?我知道我可以在 C# 的自定义任务中执行此操作,但如果可能,我会尝试使用内置功能。
例子:
我有一个项目组:
<ItemGroup>
<SolutionToBuild Include="$(SolutionRoot)\Solutions\ClassLib\ClassLib.sln">
<Properties>
AssemblySigningKey=MySigningKey;
OutDir=$(BinariesRoot)\SomeLocation\;
LibraryName=ClassLib;
PlatformTarget=x86;
</Properties>
</SolutionToBuild>
<SolutionToBuild Include="$(SolutionRoot)\Solutions\BLAH\BLAH.sln">
<Properties>
ProjectType=Web;
</Properties>
</SolutionToBuild>
</ItemGroup>
我想提取 的值(AssemblySigningKey
如果存在),然后将此值放入 MSBuild 变量中。
我已经尝试了一些方法,我能找到的最接近的例子是在一个单独的目标中使用一个转换,但即使这看起来有点像 hack,即使我能得到Condition
工作,我也必须解析出上的值拆分=
。是否没有标准方法可以在项目组中访问此元数据?
<Target Name="TransformProps"
Inputs="%(SolutionToBuild.Identity)"
Outputs="_Non_Existent_Item_To_Batch_">
<PropertyGroup>
<IncludeProps>%(SolutionToBuild.Properties)</IncludeProps>
</PropertyGroup>
<ItemGroup>
<IncludeProps Include="$(IncludeProps)" />
<Solution Include="@(SolutionToBuild)">
<IncludeProps Condition="'True'=='True' ">@(IncludeProps ->'-PROP %(Identity)', ' ')</IncludeProps>
</Solution>
</ItemGroup>
</Target>
我的主要目标将通过以下方式调用转换:
<Target Name="Main" DependsOnTargets="TransformProps">
<Message Text="Solution info: %(Solution.Identity) %(Solution.IncludeProps)" />
</Target>