我在 MSBuild 的一个属性中有一个数字“n”。我还有一个字符串“Str”,需要复制 n 次才能获得最终字符串,即“Str”重复 n 次。
例如。如果 n 为 3 且 Str 为“abc”,我想要获得的是“abcabcabc”
由于无法在 MSBuild 中循环,我不知道如何实现这一点。也许有一个项目组,但我如何根据包含“n”计数的属性创建一个?
谢谢!
我在 MSBuild 的一个属性中有一个数字“n”。我还有一个字符串“Str”,需要复制 n 次才能获得最终字符串,即“Str”重复 n 次。
例如。如果 n 为 3 且 Str 为“abc”,我想要获得的是“abcabcabc”
由于无法在 MSBuild 中循环,我不知道如何实现这一点。也许有一个项目组,但我如何根据包含“n”计数的属性创建一个?
谢谢!
要创建重复 n 次的字符串,您也可以这样做(至少在 MSBuild Tools v4.0 中):
<SomeRepeatedString>$([System.String]::New("-", 40))</SomeRepeatedString>
通常对于这样的事情,我决定使用内联 C#,因为它比在互联网上搜索找到“真正的”msbuild 解决方案花费的时间更少;干得好:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyString>abc</MyString>
<Count>3</Count>
</PropertyGroup>
<UsingTask TaskName="RepeatString" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<s ParameterType="System.String" Required="true" />
<n ParameterType="System.Int32" Required="true" />
<result ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs"><![CDATA[
result = string.Concat( Enumerable.Repeat( s, n ) );
]]></Code>
</Task>
</UsingTask>
<Target Name="doit">
<RepeatString s="$(MyString)" n="$(Count)">
<Output PropertyName="result" TaskParameter="result" />
</RepeatString>
<Message Text="Result = $(result)"/>
</Target>
</Project>