我试图使一个可重复使用的目标在我的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本身。

有帮助吗?

解决方案

的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脚本的情况下,你不想送“部署”到另一个文件FULLPATH。

希望这有助于!

其他提示

您可以“的foreach”在与目标的ItemGroup,只有你有做,在declaritive方式。甚至可以有额外的元数据中的项目,像在代码示例:

<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生成的项目文件,发现到处都是这种模式。

有可能是一个更好的方法的MSBuild做到这一点,但在蚂蚁,我会用全局属性从一个任务到下一个携带信息。这是一个糟糕的解决办法,但我没有看到在当时是一个更好的办法。你应该能够做到这一点的MSBuild,但请记住,你将需要使用的 CreateProperty 任务,动态地分配一个属性。

在另一方面,这是很容易实现在C#(或VB或其他)的任务。也许这就是你一个更好的解决方案。

    <CreateProperty
        Value="file1">
        <Output
            TaskParameter="Value"
            PropertyName="filename" />
    </CreateProperty>
    <CallTarget Targets="Deploy"/>
    <Message Text="$(filename)"/>
    <CreateProperty
        Value="file2">
        <Output
            TaskParameter="Value"
            PropertyName="filename" />
    </CreateProperty>
    <Message Text="$(filename)"/>   
    <CallTarget Targets="Deploy"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top