【问题标题】:Replace a sign in a property替换属性中的标志
【发布时间】:2013-12-20 07:45:47
【问题描述】:

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

我想要的是交换第一个“。”到一个“_”

所以它变成 AB_1_2.3.112211 前两个字符可能更长 fx ABCD_1.2.3.112211 但它仍然应该是输出 ABCD_1_2.3.112211

有没有办法在 msbuild 任务中做到这一点?

【问题讨论】:

    标签: msbuild msbuild-task msbuild-4.0 msbuildextensionpack


    【解决方案1】:

    如果输入字符串始终如您所见,即第一个“。”替换在下划线后跟一个数字之后,您可以使用 property function 并使用 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>
    

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

    • 在上面的代码中使用另一个正则表达式
    • MSBuild 社区任务有a Regex task 支持Regex.Replace 的Count 参数,所以你可以用一个简单的正则表达式来替换“.”。使用“_”并将计数设置为一个以仅执行第一个实例
    • 使用inline task,您可以在其中编写首选实现来替换第一个实例from the answers here

    【讨论】:

    • 不错的信息,但与 C# 无关。 Regex.Replace 是 .NET 的 Base Class Library 中的一个方法;语法都是“MSBuild 语言”。 BCL 文档显示了用于各种语言的语法,但不幸的是,MSBuild 没有。 “属性函数”上提供的链接确实提供了一般的 MSBuild 语法。
    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2021-03-26
    • 2010-09-18
    • 1970-01-01
    • 2019-05-27
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多