我试图在我的MSBuild文件中创建一个可重用的目标,这样我就可以用不同的参数多次调用它。
我有一个这样的骨架:
<Target Name="Deploy">
<!-- Deploy to a different location depending on parameters -->
</Target>
<Target Name="DoDeployments">
<CallTarget Targets="Deploy">
<!-- Somehow indicate I want to deploy to dev -->
</CallTarget>
<CallTarget Targets="Deploy">
<!-- Somehow indicate I want to deploy to testing -->
</CallTarget>
</Target>
但是我不知道如何将参数传递给CallTarget
,然后再传递给Target
本身。
发布于 2009-10-01 17:49:19
MSBuild目标不是用来接收参数的。相反,它们使用您为其定义的属性。
<PropertyGroup>
<Environment>myValue</Environment>
</PropertyGroup>
<Target Name="Deploy">
<!-- Use the Environment property -->
</Target>
然而,一种常见的场景是使用不同的参数多次调用目标(即部署多个网站)。在这种情况下,我使用MSBuild MSBuild
任务并将参数作为属性发送:
<Target Name="DoDeployments">
<MSBuild Projects ="$(MSBuildProjectFullPath)"
Properties="VDir=MyWebsite;Path=C:\MyWebsite;Environment=$(Environment)"
Targets="Deploy" />
<MSBuild Projects ="$(MSBuildProjectFullPath)"
Properties="VDir=MyWebsite2;Path=C:\MyWebsite2;Environment=$(Environment)"
Targets="Deploy" />
</Target>
$(MSBuildProjectFullPath)
是当前MSBuild脚本的完整路径,以防您不想将"Deploy“发送到另一个文件。
希望这能有所帮助!
发布于 2011-04-23 00:41:42
你可以用目标在ItemGroup
上'foreach‘,只是你必须以解密的方式做到这一点。您甚至可以在项中包含其他元数据,如代码示例中所示:
<ItemGroup>
<What Include="Dev">
<How>With bugs</How>
</What>
<What Include="Test">
<How>With tests</How>
</What>
<What Include="Chicken">
<How>Deep fried</How>
</What>
</ItemGroup>
<Target Name="Deploy">
<Message Text="@(What), %(How)" />
</Target>
在目标中使用项组作为标量值@(What)
可以做到这一点,并且%(How)
引用foreach项中的元数据元素。
这是在msbuild中执行操作的一种自然方式,例如,您可以在使用Visual Studio生成的项目文件中随处可见此模式。
发布于 2009-10-01 07:54:01
在MSBuild中可能有一种更好的方法,但在Ant中,我将使用全局属性将信息从一个任务传送到下一个任务。这是一个糟糕的解决方案,但我当时看不到更好的方法。您应该能够在MSBuild中执行此操作,但请记住,您将需要使用CreateProperty
任务来动态分配属性。
另一方面,在C# (或VB或其他任何语言)中实现任务非常容易。也许这对你来说是一个更好的解决方案。
https://stackoverflow.com/questions/1502410
复制相似问题