gpt4 book ai didi

msbuild - 在 MSBuild 中,我可以在元数据项上使用 String.Replace 函数吗?

转载 作者:行者123 更新时间:2023-12-02 09:32:12 29 4
gpt4 key购买 nike

在 MSBuild v4 中,可以在属性上使用函数(例如 string.replace)。但是我如何在元数据上使用函数?

我想使用 string.replace 函数,如下所示:

<Target Name="Build">
<Message Text="@(Files->'%(Filename).Replace(&quot;.config&quot;,&quot;&quot;)')" />
</Target>

不幸的是,这输出为(不完全是我想要的):

log4net.Replace(".config","");ajaxPro.Replace(".config","");appSettings.Replace(".config","");cachingConfiguration20.Replace(".config","");cmsSiteConfiguration.Replace(".config","");dataProductsGraphConfiguration.Replace(".config","");ajaxPro.Replace(".config","");appSettings.Replace(".config","");cachingConfiguration20.Replace(".config","");cmsSiteConfiguration

有什么想法吗?

最佳答案

您可以通过一些技巧来做到这一点:

$([System.String]::Copy('%(Filename)').Replace('config',''))

基本上,我们调用静态方法“Copy”来创建一个新字符串(由于某种原因,如果您只是尝试 $('%(Filename)'.Replace('.config' ,它不喜欢它) ,''))),然后对字符串调用替换函数。

全文应如下所示:

<Target Name="Build">
<Message Text="@(Files->'$([System.String]::Copy(&quot;%(Filename)&quot;).Replace(&quot;.config&quot;,&quot;&quot;))')" />
</Target>
<小时/>

编辑: MSBuild 12.0 似乎已经破坏了上述方法。作为替代方案,我们可以向所有现有的 Files 项添加新的元数据条目。我们在定义元数据项时执行替换,然后我们可以像任何其他元数据项一样访问修改后的值。

例如

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ItemGroup>
<Files Include="Alice.jpg"/>
<Files Include="Bob.not-config.gif"/>
<Files Include="Charlie.config.txt"/>
</ItemGroup>

<Target Name="Build">
<ItemGroup>
<!--
Modify all existing 'Files' items so that they contain an entry where we have done our replace.
Note: This needs to be done WITHIN the '<Target>' (it's a requirment for modifying existing items like this
-->
<Files>
<FilenameWithoutConfig>$([System.String]::Copy('%(Filename)').Replace('.config', ''))</FilenameWithoutConfig>
</Files>
</ItemGroup>

<Message Text="@(Files->'%(FilenameWithoutConfig)')" Importance="high" />
</Target>
</Project>

结果:

D:\temp>"c:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" /nologo test.xml
Build started 2015/02/11 11:19:10 AM.
Project "D:\temp\test.xml" on node 1 (default targets).
Build:
Alice;Bob.not-config;Charlie
Done Building Project "D:\temp\test.xml" (default targets).

关于msbuild - 在 MSBuild 中,我可以在元数据项上使用 String.Replace 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5103026/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com