Ian*_*emp 10 msbuild msbuild-4.0
我有以下字符串MasterVersion:
1.1-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我需要把它分开.和 - 所以它成为一个string[]叫做的数组SplitVersion,即:
1
1
SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我能想到的所有内容,包括下面的十几种变体,没有任何乐趣:
<!-- doesn't work -->
<ItemGroup>
<VersionDelimiters Include="." />
<VersionDelimiters Include="-" />
<SplitVersion Include="$(MasterVersion.Split(@VersionDelimiters))" />
</ItemGroup>
<!-- doesn't work either -->
<ItemGroup>
<SplitVersion Include="$(MasterVersion.Split([`.`; `-`]))" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
什么模糊的MSBuild语法我错过了/搞砸了?
Chr*_*n.K 14
MSBuild 4.0属性函数无法处理数组(基本上很好),但是当你这样做时
Split(`,`, `-`)
Run Code Online (Sandbox Code Playgroud)
你正在调用String.Split(params string[])重载,这需要一个数组(即使在C#中,params关键字将在场景后面创建一个数组并执行类似Split(new string[] { ',', '-' })内部的操作).
你能做的是以下几点:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0">
<PropertyGroup>
<MasterVersion>1.1-SNAPSHOT</MasterVersion>
</PropertyGroup>
<ItemGroup>
<SplitVersion Include="$(MasterVersion.Replace(`-`, `.`).Split(`.`))" />
</ItemGroup>
<Target Name="Test">
<Message Importance="high" Text="@(SplitVersion)"/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
或者您可以先创建要传递给Split的(字符串)数组:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<MasterVersion>1.1-SNAPSHOT</MasterVersion>
<Delimiters>.;-</Delimiters>
<DelimitersArray>$(Delimiters.Split(`;`))</DelimitersArray>
</PropertyGroup>
<ItemGroup>
<SplitVersion Include="$(MasterVersion.Split($(DelimitersArray)))" />
</ItemGroup>
<Target Name="Test">
<Message Importance="high" Text="@(SplitVersion)"/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
在这种情况下哪个不是更好;-)
哦,您可能需要查看此MSDN博客,了解更多有用的信息.
更新评论:
SplitVersion技术上,"内容" 是"ITaskItem的数组",是的.你会处理它,但你会处理Items(of ItemGroups); 包括"批处理"等内容
你不能真正在msbuild项目文件中"通过索引访问东西".这样的表达式
$(SplitVersion)[0]或者@(SplitVersion)[0]或@(SplitVersion[0])不这样做,你会觉得/等.如果你真的愿意,可以通过"index"为"数组元素"分配单独的属性.
例:
<PropertyGroup>
<SplitVersion0>$(MasterVersion.Split($(DelimitersArray))[0])</SplitVersion0>
<SplitVersion1>$(MasterVersion.Split($(DelimitersArray))[1])</SplitVersion1>
<SplitVersion2>$(MasterVersion.Split($(DelimitersArray))[2])</SplitVersion2>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
数组索引操作符在这里工作,因为在这种情况下,您仍然处于.NET表达式的"上下文"中.一旦将其分配给属性(或项目组),您就不能再这样做了.
| 归档时间: |
|
| 查看次数: |
8444 次 |
| 最近记录: |