如何将特定文件夹部署为包

时间:2017-11-20 12:02:32

标签: visual-studio npm deployment msbuild teamcity

我有一个asp.net MVC项目和前端,通过npm命令构建。

并在构建后提供app文件夹。 enter image description here

此文件夹不包含在我的csproj文件中。

当我从teamcity部署时,我使用了2个步骤。

  1. 发布申请
  2. / app文件夹的FTP部署(每个文件单独)
  3. 但是ftp部署非常慢。 如何将此文件夹部署为' package'?

    也许我可以动态地将它包含到csproj文件中, 或者是其他东西?

1 个答案:

答案 0 :(得分:3)

  

但是ftp部署非常慢。如何将此文件夹部署为   '包'?

实际上,FTP部署包含许多文件的文件夹会比较慢。因为它只打开一个线程,并且一次只上传一个文件。您可以考虑通过MSBuild目标来压缩该文件夹:

  <ItemGroup>
    <Content Include="app\**\*.*" />
  </ItemGroup>

  <Import Project="..\.build\MSBuild.Community.Tasks.Targets" />

  <Target Name="AfterBuild">
    <PropertyGroup>
      <ZipPackagePath>bin</ZipPackagePath>
    </PropertyGroup>
    <Zip Files="@(Link)" WorkingDirectory="$(ZipPackagePath)" ZipFileName="output\ZipName.zip" ZipLevel="9" />
  </Target>

注意:您需要添加nuget包“MSBuildTasks”,您可以将ReleasePath更改为其他文件夹。

但是你仍然需要在FTP部署后解压缩该zip文件。

  

也许我可以将它动态地包含在csproj文件中,或者其他东西   别的?

或者,您可以动态地将其包含到您的项目文件中,这是我们的建议。

要完成此操作,请卸载您的项目。然后在项目的最后,就在结束标记之前,放在脚本下面:

  <Target Name="AddAppFiles" AfterTargets="Build">
    <ItemGroup>
      <Content Include="app\**\*.*" />
    </ItemGroup>
  </Target>

发布后,app文件夹包含在目标位置:

enter image description here

注意:

  1. 使用此目标,文件夹app不会出现在解决方案资源管理器中(动态包含)。

  2. 如果在构建完成后生成app文件夹,则可以更改 AfterTargets="Build"BeforeTargets="_CheckForInvalidConfigurationAndPlatform",例如:

  3. <Target Name="AddAppFiles" BeforeTargets="_CheckForInvalidConfigurationAndPlatform">