我想将应用程序部署到服务器列表。我已经解决了所有构建问题,但是我无法发布到服务器列表。我想从外部文件中读取服务器列表,并调用目标,传递每个服务器的名称。
<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中有两行
答案 0 :(得分: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)项目。
[edit] Outputs =“%(Identity)”的原因是在没有实际执行最新检查的情况下获得目标批处理。
答案 1 :(得分: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>
答案 2 :(得分:0)
这将是最干净的方法。使用DependsOnTargets确保在DeployToServer之前运行Test目标。
要获取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>