【问题标题】:How to deploy a specific folder as a package如何将特定文件夹部署为包
【发布时间】:2018-05-03 15:32:02
【问题描述】:

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

并在构建后提供 app 文件夹。

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

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

  1. 发布申请
  2. /app 文件夹的 FTP 部署(每个文件单独)

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

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

【问题讨论】:

    标签: visual-studio npm deployment msbuild teamcity


    【解决方案1】:

    但是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>
    

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

    注意:

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

    2. 如果编译完成后生成app文件夹,可以更改 AfterTargets="Build"BeforeTargets="_CheckForInvalidConfigurationAndPlatform",比如:

    &lt;Target Name="AddAppFiles" BeforeTargets="_CheckForInvalidConfigurationAndPlatform"&gt;

    【讨论】:

    • 我添加了目标 &lt;Target Name="AddAppFiles" BeforeTargets="Publish"&gt; &lt;ItemGroup&gt; &lt;Content Include="app\**\*.*" /&gt; &lt;/ItemGroup&gt; &lt;/Target&gt; 但这不起作用
    • @ArtemPolischuk,因为您使用的是 asp.net MVC 项目,所以不包括目标 Publish。因此,如果您使用BeforeTargets="Publish" MSBuild 无法调用此目标(仅 clickonce 发布具有发布目标、WPF、Windows 窗体等)。您可以将其更改为AfterTargets="Build"BeforeTargets="_CheckForInvalidConfigurationAndPlatform"
    • 这项工作,当我尝试从 Visual Studio 部署时。但是,当我从 teamcity 部署时,这不起作用。我的 TC 设置:目标:重建 /p:Platform="Any CPU" /p:DeployOnBuild=True /p:Configuration=WebClient.Release /p:PublishProfile="web" /p:ProfileTransformWebConfigEnabled=True /p:_DestinationType=AzureWebSite /p:MSDeployPublishMethod=WMSVC /p:username=zz /p:Password=zz /p:SkipExtraFilesOnServer=True
    • @Genato,是的,项目文件,.csproj
    • @Genato,由于我没有足够的关于你的信息,我建议你可以发布一个关于你的问题的详细信息的新帖子,会有更多的 MVP 想要帮助你,我会有空的时候也看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多