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

并创建一个新的目标 LoadServers,将文件读入 @(Servers) 项。

[编辑] 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 回答