66

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それ自体を渡す方法がわかりません。

4

4 に答える 4

83

MSBuild ターゲットは、パラメーターを受け取るようには設計されていません。代わりに、ユーザーが定義したプロパティを使用します。

<PropertyGroup>
    <Environment>myValue</Environment>
</PropertyGroup>

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

ただし、一般的なシナリオは、さまざまなパラメーターを使用してターゲットを数回呼び出すことです (つまり、複数の Web サイトをデプロイします)。その場合、MSBuildMSBuildタスクを使用して、パラメーターをプロパティとして送信します。

<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)"Deploy" を別のファイルに送信したくない場合に備えて、現在の MSBuild スクリプトのフルパスを指定します。

お役に立てれば!

于 2009-10-01T17:49:18.773 に答える
24

あなたはターゲットを使って「foreach」することができItemGroupます、あなただけが宣言的な方法でそれをしなければなりません。コード例のように、アイテムに追加のメタデータを含めることもできます。

<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で物事を行うための自然な方法です。たとえば、このパターンはVisualStudioで生成されたプロジェクトファイルのどこにでもあります。

于 2011-04-22T16:41:41.920 に答える
0
    <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"/>
于 2010-01-07T01:36:38.873 に答える
0

MSBuild でこれを行うためのより良い方法があるかもしれませんが、Ant では、グローバル プロパティを使用して、あるタスクから次のタスクに情報を伝達します。これはお粗末な解決策でしたが、当時はこれ以上の方法はありませんでした。これは MSBuild で実行できるはずですが、CreatePropertyタスクを使用してプロパティを動的に割り当てる必要があることに注意してください。

一方、C# (または VB など) でタスクを実装するのは非常に簡単です。多分それはあなたにとってより良い解決策です。

于 2009-10-01T07:54:01.337 に答える