首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向CallTarget传递参数的MSBuild

向CallTarget传递参数的MSBuild
EN

Stack Overflow用户
提问于 2009-10-01 07:31:49
回答 4查看 42.4K关注 0票数 66

我试图在我的MSBuild文件中创建一个可重用的目标,这样我就可以用不同的参数多次调用它。

我有一个这样的骨架:

代码语言:javascript
复制
<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本身。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-01 17:49:19

MSBuild目标不是用来接收参数的。相反,它们使用您为其定义的属性。

代码语言:javascript
复制
<PropertyGroup>
    <Environment>myValue</Environment>
</PropertyGroup>

<Target Name="Deploy">
    <!-- Use the Environment property -->
</Target>

然而,一种常见的场景是使用不同的参数多次调用目标(即部署多个网站)。在这种情况下,我使用MSBuild MSBuild任务并将参数作为属性发送:

代码语言:javascript
复制
<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“发送到另一个文件。

希望这能有所帮助!

票数 83
EN

Stack Overflow用户

发布于 2011-04-23 00:41:42

你可以用目标在ItemGroup上'foreach‘,只是你必须以解密的方式做到这一点。您甚至可以在项中包含其他元数据,如代码示例中所示:

代码语言:javascript
复制
<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生成的项目文件中随处可见此模式。

票数 24
EN

Stack Overflow用户

发布于 2009-10-01 07:54:01

在MSBuild中可能有一种更好的方法,但在Ant中,我将使用全局属性将信息从一个任务传送到下一个任务。这是一个糟糕的解决方案,但我当时看不到更好的方法。您应该能够在MSBuild中执行此操作,但请记住,您将需要使用CreateProperty任务来动态分配属性。

另一方面,在C# (或VB或其他任何语言)中实现任务非常容易。也许这对你来说是一个更好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1502410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档