MSBuild получает свойство подстроки перед символом подчеркивания
В MSBuild у меня есть свойство, значением которого является Name_Something. Как я могу получить часть имени этой собственности.
3 ответа
С 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
Вы могли бы использовать 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>
Если я правильно понимаю ваш вопрос, вы пытаетесь получить подстроку свойства MSBuild. В MSBuild нет прямого способа манипулирования строками, как в NAnt. Итак, у вас есть два варианта:
1). Создайте отдельные переменные для каждой части и объедините их:
<PropertyGroup>
<Name>Name</Name>
<Something>Something</Something>
<Combined>$(Name)_$(Something)</Combined>
</PropertyGroup>
Это прекрасно работает, если детали известны заранее, но не если вам нужно сделать это динамически.
2). Напишите клиентскую задачу MSBuild, которая выполняет манипуляции со строками. Это будет ваш единственный вариант, если это необходимо сделать во время выполнения.
Похоже, вы могли бы использовать метаданные элемента вместо свойства:
<ItemGroup>
<Something Include="SomeValue">
<Name>YourName</Name>
<SecondName>Foo</SecondName>
</Something>
</ItemGroup>