如何创建msbuild“;任务“;很好地格式化输出
问题 我的msbuild文件中到处都有这样的代码:如何创建msbuild“;任务“;很好地格式化输出,msbuild,Msbuild,问题 我的msbuild文件中到处都有这样的代码: <Message Text="$(NewLine)==============================================$(NewLine)" Importance="High" /> <Message Text=" CLEAN UP " Importance="High" /> <Message Text="$(NewLine
<Message
Text="$(NewLine)==============================================$(NewLine)"
Importance="High" />
<Message
Text=" CLEAN UP "
Importance="High" />
<Message
Text="$(NewLine)==============================================$(NewLine)"
Importance="High" />
目标
现在,我想协调输出,减少代码冗余,并将消息格式逻辑提取到某种任务中
这就是我想象的用法:
<Message Text="$(PrintInBox(CLEAN UP))" Importance="High"/>
这样我也可以在中重用它
<Error Text="$(PrintInBox(CLEAN UP))"/>
如果这绝对不可能,比如
<PrintInBox Text="CLEAN UP"/>
这将是下一个最好的选择
到目前为止我的发现 到目前为止,我发现的“最好的”事情是。 但我真的需要编写c代码来完成这项工作吗?这只是一些简单的字符串连接 此外,使用自定义任务几乎与复制整个代码一样麻烦,我猜它看起来像这样:
<FormatInBox Text="CLEAN UP">
<Output TaskParameter="Result" ItemName="FormattedText"/>
</FormatInBox>
<Message Text="@(FormattedText)" Importance="High"/>
或者如果我创建了更具体的任务:
<MessageInBox Text="CLEAN UP" Importance="High" />
及
及
但这就需要复制一些参数并传递它们。此外,在MessageInBox
、warnibox
和ErrorInBox
任务中仍然存在代码重复
问题
如何为消费者实现最简单的界面?如何才能最好地减少代码冗余?
真的没有比我以前找到的更好的方法了吗?我是否可以创建一个由msbuild xml组成的msbuild任务,而不是C#或VB.net或Javascript之类的
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Box>============================================== Text ==============================================</Box>
</PropertyGroup>
<Target Name="Foo">
<Message Text="$(Box.Replace(Text, CLEAN UP 1))" Importance="High" />
<Warning Text="$(Box.Replace(Text, CLEAN UP 2))" />
<Error Text="$(Box.Replace(Text, CLEAN UP 3))" />
</Target>
</Project>
==============================================
正文
==============================================
谢谢。但我如何调用它并传递参数(“清理”)?据我所知,
CallTarget
不能用于传递参数。此外,属性和项目定义仅在目标完成后对其他目标可见。哦,好吧,我现在意识到我可以在Foo
目标之外定义Box
属性,也就是说“全局”。然后我可以在任何我喜欢的地方使用“$(Box.Replace(Text,CLEAN UP 3))”。@BatteryBackupUnit是的,您可以在任何地方定义或重新定义它。就我个人而言,我有一个自定义的任务和资源文件,其中包含了头文件,有时甚至嵌入了cygwin版本的。
<ErrorInBox Text="CLEAN UP" Condition = "..." />
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Box>============================================== Text ==============================================</Box>
</PropertyGroup>
<Target Name="Foo">
<Message Text="$(Box.Replace(Text, CLEAN UP 1))" Importance="High" />
<Warning Text="$(Box.Replace(Text, CLEAN UP 2))" />
<Error Text="$(Box.Replace(Text, CLEAN UP 3))" />
</Target>
</Project>