替换属性中的标志

use*_*911 1 msbuild msbuild-task msbuild-4.0 msbuildextensionpack

假设我在一个属性中得到了这个AB_1.2.3.112211

我想要的是交换第一个"." 到一个"_"

因此它变为AB_1_2.3.112211两个第一个字符可能更长fx ABCD_1.2.3.112211但它仍然应该是输出ABCD_1_2.3.112211

有没有办法在msbuild任务中执行此操作?

sti*_*ijn 5

如果输入字符串总是在显示它们时,即第一个"." 要替换后跟一个下划线后跟一个数字,你可以使用一个属性函数并使用C#的静态Regex.Replace方法:

<Target Name="Repl">
  <PropertyGroup>
    <Prop>ABCD_1.2.3.112211</Prop>
  </PropertyGroup>
  <Message Text="$([System.Text.RegularExpressions.Regex]::Replace( $(Prop), '_(\d*)\.', '_$1_' ) )" />
</Target>
Run Code Online (Sandbox Code Playgroud)

如果用例更复杂,还有其他选择:

  • 在上面的代码中使用另一个正则表达式
  • MSBuild社区任务有一个Regex任务,它支持Regex.Replace的Count参数,因此您可以使用简单的正则表达式来替换".".使用"_"并将count设置为只执行第一个实例
  • 使用内联任务,您可以在其中编写首选实现,以从此处的答案中替换第一个实例

  • 好的信息,但与C#无关.`Regex.Replace`是.NET [基类库]中的一种方法(http://en.wikipedia.org/wiki/Base_Class_Library); 语法是所有"MSBuild语言".BCL文档显示了各种语言的使用语法,但不幸的是,MSBuild没有."属性函数"中提供的链接确实提供了一般的MSBuild语法. (2认同)