MSBuild получает свойство подстроки перед символом подчеркивания - PullRequest
13 голосов
/ 22 июня 2010

В MSBuild у меня есть свойство, значением которого является Name_Something.Как я могу получить часть имени этого свойства.

Ответы [ 3 ]

33 голосов
/ 23 июня 2010

С MSBuild 4

Если вы используете MSBuild 4, вы можете использовать новые и блестящие функции свойств .

<PropertyGroup>
  <MyProperty>Name_Something</MyProperty>
</PropertyGroup>

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

  <Message Text="PropertyName: $(PropertyName)"/>
</Target>

С MSBuild <4 </h2> Вы можете использовать задачу RegexReplace Задача сообщества MSBuild <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>

0 голосов
/ 23 июня 2010

Если я правильно понимаю ваш вопрос, вы пытаетесь получить подстроку свойства MSBuild.В MSBuild нет прямого способа манипулирования строками, как в NAnt.Таким образом, у вас есть два варианта:

1).Создайте отдельные переменные для каждой детали и объедините их:

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

Это хорошо работает, если детали известны заранее, но не если вам нужно сделать это динамически.

2).Напишите клиентскую задачу MSBuild, которая выполняет манипуляции со строками.Это будет ваш единственный вариант, если это необходимо сделать во время выполнения.

0 голосов
/ 23 июня 2010

Похоже, вы могли бы использовать Метаданные элемента вместо свойства:

<ItemGroup>
    <Something Include="SomeValue">
        <Name>YourName</Name>
        <SecondName>Foo</SecondName>
    </Something>
</ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...