String 在MSBuild中生成一个字符串,作为基本字符串的n次串联
我在MSBuild的属性中有一个数字“n”。我还有一个字符串“Str”,需要复制n次才能得到一个最终的字符串,即重复“Str”n次 如果n是3,Str是“abc”,我想得到的是“abcabc” 由于不能在MSBuild中循环,我不知道如何实现这一点。可能使用项目组,但如何基于包含“n”计数的属性创建项目组String 在MSBuild中生成一个字符串,作为基本字符串的n次串联,string,msbuild,msbuild-4.0,String,Msbuild,Msbuild 4.0,我在MSBuild的属性中有一个数字“n”。我还有一个字符串“Str”,需要复制n次才能得到一个最终的字符串,即重复“Str”n次 如果n是3,Str是“abc”,我想得到的是“abcabc” 由于不能在MSBuild中循环,我不知道如何实现这一点。可能使用项目组,但如何基于包含“n”计数的属性创建项目组 谢谢 通常对于这样的事情,我决定使用内联C#,因为它比在互联网上搜索找到“真正的”msbuild解决方案花费的时间要少;给你: <?xml version="1.0" encoding=
谢谢 通常对于这样的事情,我决定使用内联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>
abc
3.
要创建重复n次的字符串,也可以这样做(至少在MSBuild Tools v4.0中):
$([System.String]::新建(“-”,40))
谢谢,这当然比我希望的要麻烦一些,但它确实做到了。正如您所说,找到“真正”的msbuild解决方案很棘手。这就是为什么我在使用这些解决方案时遇到问题:for me$(MSBuildToolsPath)=“C:\Windows\Microsoft.NET\Framework\v2.0.50727”,其中没有“Microsoft.Build.Tasks.v4.0.dll”,尽管我显然在使用MSBuild 4,因为我可以使用属性函数?这似乎是您的安装/设置中的一个问题?您是否使用了上面的代码,包括ToolsVersion=“4.0”选项?这导致根据Aha设置MsBuildToolsPath,不,我没有使用完全相同的代码,我将其集成到自己的脚本中,并且似乎没有设置ToolsVersion标志。然而,设置它并没有帮助,我仍然得到了指向2.0的错误路径。虽然它与您的脚本一样工作,但我的脚本中一定有错误,试图找出原因。
<SomeRepeatedString>$([System.String]::New("-", 40))</SomeRepeatedString>