2

我在 MSBuild 的一个属性中有一个数字“n”。我还有一个字符串“Str”,需要复制 n 次才能获得最终字符串,即“Str”重复 n 次。

例如。如果 n 为 3 且 Str 为“abc”,我想要获得的是“abcabcabc”

由于无法在 MSBuild 中循环,我不知道如何实现这一点。也许有一个项目组,但我如何根据包含“n”计数的属性创建一个?

谢谢!

4

2 回答 2

4

要创建重复 n 次的字符串,您也可以这样做(至少在 MSBuild Tools v4.0 中):

<SomeRepeatedString>$([System.String]::New("-", 40))</SomeRepeatedString>
于 2013-05-23T18:32:29.707 回答
3

通常对于这样的事情,我决定使用内联 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>
于 2012-10-31T11:22:55.937 回答