我有一个Visual Studio解决方案,其中包含多个Web项目(例如WebappA、WebappB、WebappC)。当TFS构建该解决方案时,它会将构建结果放在一个名为_PublishedWebsites的文件夹中。文件夹结构可能如下所示:
$(OutDir)
|
+-- _PublishedWebsites
|
+-- WebappA
|
+-- WebappA_Package
|
+-- WebappB
|
+-- WebappB_Package
|
+-- WebappC
|
+-- WebappC_Package
我希望为我们的运营部门建立一个部署包,以zip文件的形式提供。因此,我让TFS运行一个MSBuild脚本,将_Package文件夹复制到自定义目录结构中,并在随后的步骤中进行压缩。
$(PackageDirectory)
|
+-- Web
|
+-- WebappA
|
+-- WebappB
|
+-- WebappB
我能够创建一堆MSBuild目标来执行复制操作。但是我对我的解决方案不满意。我以显式方式引用每个webapp,这就是为什么我最终得到了很多重复的代码。更糟糕的是,每次添加新的webapp时,我都必须扩展构建脚本。
<Target Name="Pack" DependsOnTargets="Pack-WebappA;Pack-WebappB;Pack-WebappC" />
<Target Name="Pack-WebappA">
<ItemGroup>
<WebAppFile Include="$(OutDir)_PublishedWebsites\WebappA_Package\*.*" />
</ItemGroup>
<Copy SourceFiles="@(WebAppFile)" DestinationFolder="$(PackageDirectory)Web\WebappA\" />
</Target>
<Target Name="Pack-WebappB">
<ItemGroup>
<WebAppFile Include="$(OutDir)_PublishedWebsites\WebappB_Package\*.*" />
</ItemGroup>
<Copy SourceFiles="@(WebAppFile)" DestinationFolder="$(PackageDirectory)Web\WebappB\" />
</Target>
<Target Name="Pack-WebappC">
<ItemGroup>
<WebAppFile Include="$(OutDir)_PublishedWebsites\WebappC_Package\*.*" />
</ItemGroup>
<Copy SourceFiles="@(WebAppFile)" DestinationFolder="$(PackageDirectory)Web\WebappC\" />
</Target>
我正在寻找一种通用的解决方案,不需要引用具体的Web应用程序。实质上,MSBuild所要做的就是查看_PublishedWebsites文件夹,并将每个带有“_Package”后缀的子文件夹复制到另一个文件夹中,并删除后缀。这听起来很简单,但我没有想出可行的解决方案。我尝试使用批处理,但未成功。