如何在Visual Studio Build步骤创建的ProjectName.zip包中包含Gulp生成的dist文件夹

时间:2016-06-27 13:49:12

标签: azure-devops

我有一个构建定义,其中包含以下构建步骤:

  1. NuGet Installer
  2. NPM
  3. 咕嘟咕嘟
  4. Visual Studio Build
  5. Azure Web App部署
  6. 在第3步中,Gulp在我的应用程序根目录中生成dist文件夹。 dist文件夹包含一些子文件夹和文件。子文件夹本身可以包含其他子文件夹和文件。

    在步骤4中, Visual Studio Build 步骤在完成时创建<ProjectName>.zip zip文件。

    然后, Azure Web App部署步骤将该zip文件部署到我的Azure Web App。

    如何在dist中添加<ProjectName>.zip文件夹?

    我尝试在同一构建定义中一次部署一个 Azure Web App Deployments 一个zip文件,但第二个 Azure Web App部署构建步骤擦除了部署的任何内容由第一个。有没有办法告诉第二个 Azure Web App部署步骤“追加”到第一个 Azure Web App部署步骤部署的内容?

2 个答案:

答案 0 :(得分:5)

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  ...
  ...
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  ...
  ...
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target> -->
  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>
  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="dist\**\*" />
      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>dist\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
</Project>
  • 属性CopyAllFilesToSingleFolderForPackageDependsOn必须在导入<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  • 之后
  • dist\**\*表示取直接位于Web应用程序根目录
  • 下的dist文件夹
  • dist\%(RecursiveDir)%(Filename)%(Extension)表示将dist文件夹直接放在包中的Web应用程序根目录下

示例包路径:

C:\_publish\BuildAgentDemo.zip\Content\C_C\Repos\BuildAgentDemoTest1\BuildAgentDemo\obj\Release\Package\PackageTmp\dist
  • BuildAgentDemo.zip是Web部署包发布配置文件
  • 创建的工件之一
  • PackageTmp是您的网络应用程序根目录
  • dist是自定义文件夹和文件的最终位置

答案 1 :(得分:1)

您可以在项目文件中添加自定义目标,以包含Gulp生成的文件。有关详细信息,请参阅此问题:How do you include additional files using VS2010 web deployment packages?

另一种发布Gulp文件夹的方法是启用Azure Web App的FTP部署。然后,您可以在“Azure Web App部署”任务之后添加FTP Uploader任务。使用“Azure Web App部署”任务部署由VS Build生成的程序包,并使用“FTP Uploader”任务将“dist”文件夹上载到Azure Web App。注意:确保取消选中FTP上传器任务的“删除旧文件”选项。