Frage

Ich versuche, ein wiederverwendbares Ziel in meinem MSBuild zu machen Datei, so kann ich es mehrmals aufrufen mit unterschiedlichen Parametern.

Ich habe ein Skelett wie diese bekommen:

<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>

Aber ich kann nicht herausfinden, wie Parameter zu ermöglichen, übergeben in die CallTarget werden, und dann wiederum die Target selbst.

War es hilfreich?

Lösung

MSBuild Ziele nicht erhalten Parameter ausgelegt. Stattdessen haben sie die Eigenschaften verwenden Sie für sie definieren.

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

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

Allerdings ist ein gängiges Szenario ein Ziel mehrmals mit unterschiedlichen Parametern (d Bereitstellen von mehreren Websites) aufzurufen. In diesem Fall verwende ich die MSBuild Aufgabe MSBuild und die Parameter als Eigenschaften an:

<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) ist die fullpath des aktuellen MSBuild-Skript, falls Sie nicht wollen, „Bereitstellen“ auf eine andere Datei senden.

Hope, das hilft!

Andere Tipps

Sie können ‚foreach‘ über einen ItemGroup mit einem Ziel, nur haben Sie es in declaritive Weise zu tun. Sie können sogar zusätzliche Metadaten in Einzelteile haben, wie im Codebeispiel:

<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>
eine Artikelgruppe als Skalarwert @(What) innerhalb eines Ziels

Mit dem Trick funktioniert, und %(How) verweist auf ein Metadatenelement in einem foreach-Elemente.

Es ist eine natürliche Art und Weise der Dinge in msbuild zu tun, zum Beispiel Sie dieses Muster überall in Projektdateien erzeugt mit Visual Studio finden.

Es könnte eine bessere Möglichkeit, dies in MSBuild zu tun, aber in Ant, würde ich globale Eigenschaften verwenden, um Informationen von einer Aufgabe zur nächsten zu transportieren. Es war eine lausige Lösung, aber ich habe keine bessere Art und Weise zu der Zeit sehen. Sie sollten in MSBuild, dies tun können, aber denken Sie daran, dass Sie die CreateProperty Aufgabe dynamisch eine Eigenschaft zuweisen.

Auf der anderen Seite, ist es ziemlich einfach Aufgaben in C # zu implementieren (oder VB oder was auch immer). Vielleicht ist das eine bessere Lösung für Sie.

    <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"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top