2

サーバーのリストにアプリケーションをデプロイしたいと考えています。ビルドの問題はすべて解決しましたが、サーバーのリストへの公開に問題があります。外部ファイルからサーバーのリストを読み取り、各サーバーの名前を渡してターゲットを呼び出したいと考えています。

<ItemGroup>
    <File Include="$(SolutionFolder)CP\Build\DenormDevServers.txt" />
</ItemGroup>

<Target Name="DeployToServer" Inputs="Servers" Outputs="Nothing">
    <Message Text="Deployment to server done here.  Deploying to server: @(Servers)" />
</Target>

<Target Name="Test">
    <ReadLinesFromFile File="@(File)">
        <Output TaskParameter="Lines" ItemName="Servers" />
    </ReadLinesFromFile>

    <CallTarget Targets="DeployToServer" ContinueOnError="true"></CallTarget>
</Target>

リスト内の各サーバーに「デプロイ」することができないようです。出力は次のようになります。

Deployment to server done here.  Deploying to server:

サーバー名がなく、複数回実行されていることに注意してください。DenormDevServers.txt には 2 行あります

4

3 に答える 3

2

入力と出力を適切に使用していません。

デプロイ ターゲットは次のようになります。

<Target Name="DeployToServer" Inputs="@(Servers)" Outputs="%(Identity)">
    <Message Text="Deployment to server done here.  Deploying to server: %(Servers.Identity)" />
</Target>

また、ターゲットを明示的に呼び出すのではなく、依存関係を使用する必要があります。

<Target Name="Test" DependsOn="LoadServers;DeployToServer"/>

そして、ファイルを @(Servers) アイテムに読み込む新しいターゲット LoadServers を作成します。

[編集] Outputs="%(Identity)" の理由は、実際に最新のチェックを実行せずにターゲットのバッチ処理を取得することです。

于 2012-11-01T17:59:15.920 に答える
0

これはあなたの結果を達成します。タスクをメソッドに少し似すぎて使用しようとしていると思います。

<?xml version="1.0" encoding="utf-8"?>
<Project  xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTarget="Test" >

<ItemGroup>
    <File Include=".\CP\Build\DenormDevServers.txt" />
</ItemGroup>

<Target Name="DeployToServer" DependsOnTargets="Test">
   <Message Text="Deployment to server done here.  Deploying to server: @(Servers)" /> 
</Target>

<Target Name="Test">
    <ReadLinesFromFile File="@(File)">
        <Output TaskParameter="Lines" ItemName="Servers" />
    </ReadLinesFromFile>
</Target>
</Project>
于 2012-11-01T16:58:04.357 に答える
0

これが最もクリーンなアプローチです。DependsOnTargets を使用して、Test ターゲットが DeployToServer の前に実行されるようにします。

ItemGroup 内の各アイテムの値を取得するには、%(Identity) を使用する必要があります。

次のコードは、必要な出力を生成します。

<ItemGroup>
    <File Include="$(SolutionFolder)CP\Build\DenormDevServers.txt" />
</ItemGroup>

<Target Name="DeployToServer"
        DependsOnTargets="Test">
    <Message Text="Deployment to server done here.  Deploying to server: %(Servers.Identity)" />
</Target>

<Target Name="Test">
    <ReadLinesFromFile File="@(File)">
        <Output TaskParameter="Lines"
                ItemName="Servers" />
    </ReadLinesFromFile>       
</Target>
于 2012-11-02T16:06:02.503 に答える