【问题标题】:MSBuild getting property substring before underscore symbolMSBuild 在下划线符号之前获取属性子字符串
【发布时间】:2011-03-06 21:18:57
【问题描述】:

在 MSBuild 中,我有一个值为 Name_Something 的属性。如何获取此属性的名称部分。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    使用 MSBuild 4

    如果您使用 MSBuild 4,则可以使用新的闪亮的property functions

    <PropertyGroup>
      <MyProperty>Name_Something</MyProperty>
    </PropertyGroup>
    
    <Target Name="SubString">
      <PropertyGroup>
        <PropertyName>$(MyProperty.Substring(0, $(MyProperty.IndexOf('_'))))</PropertyName>
      </PropertyGroup>
    
      <Message Text="PropertyName: $(PropertyName)"/>
    </Target>
    

    使用 MSBuild

    你可以使用MSBuild Community TaskRegexReplace任务

    <PropertyGroup>
      <MyProperty>Name_Something</MyProperty>
    </PropertyGroup>
    
    <Target Name="RegexReplace">
      <RegexReplace Input="$(MyProperty)" Expression="_.*" Replacement="" Count="1">
        <Output ItemName ="PropertyNameRegex" TaskParameter="Output" />
      </RegexReplace>
    
      <Message Text="PropertyNameRegex: @(PropertyNameRegex)"/>
    </Target>
    

    【讨论】:

    • 您的两个建议都是正确的。太糟糕了,我无法应用第二个,因为动态设置 VSDBSQL SetVariable 属性不起作用。我想 substring 可以与 MSBuild 4 一起使用,但我使用 MSBuild 3。
    【解决方案2】:

    如果我正确理解您的问题,您正在尝试获取 MSBuild 属性的子字符串。在 MSBuild 中没有直接的方法来进行字符串操作,就像在 NAnt 中一样。所以你有两个选择:

    1)。为每个部分创建单独的变量并将它们组合起来:

    <PropertyGroup>
      <Name>Name</Name>
      <Something>Something</Something>
      <Combined>$(Name)_$(Something)</Combined>
    </PropertyGroup>
    

    如果事先知道这些部件,这可以正常工作,但如果您需要动态执行此操作,则不会。

    2)。编写一个执行字符串操作的客户 MSBuild 任务。如果需要在运行时完成,这将是您唯一的选择。

    【讨论】:

      【解决方案3】:

      看起来您可以使用 Item MetaData 代替属性:

      <ItemGroup>
          <Something Include="SomeValue">
              <Name>YourName</Name>
              <SecondName>Foo</SecondName>
          </Something>
      </ItemGroup>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-29
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        相关资源
        最近更新 更多