【问题标题】:Ignore file from delete during WebDeploy在 WebDeploy 期间忽略删除文件
【发布时间】:2011-02-18 03:16:12
【问题描述】:

我正在使用 TeamCity 通过 msbuild 和 WebDeploy 构建和部署一组 MVC 应用程序。

在我的解决方案构建/部署之前的步骤中,我将 app_offline.htm 复制到部署目录,以便我可以执行 SQL 更新和其他 Web/解决方案管理步骤,包括构建。

WebDeploy 中的一项设置是删除未包含在项目中或运行站点不需要的文件。这每次都会删除我的 app_offline.htm 文件。虽然我知道这是一种期望的结果,但有没有办法在部署时排除此文件从部署目录中删除?

我尝试使用 ExcludeFromPackageFiles 选项添加 ItemGroup,但没有结果。

【问题讨论】:

  • 您确定这已签出吗?您可以创建一个新的 MSBUILD 目标来将此文件放在某个位置,然后执行另一项任务将其恢复。
  • 这行得通,但是在下一个构建目标运行的几秒钟内,该站点将可供用户访问,如果没有运行 db 脚本,这将不理想,或者发布时出现错误,我们必须将网站回滚到以前的状态

标签: visual-studio-2010 teamcity webdeploy app-offline.htm


【解决方案1】:

我遇到了类似的问题,希望将缩小的 javascript 文件保留在部署包中,即使它们不是项目的一部分。

我为此添加了一个自定义 MSBuild 目标,这对我有用:

<!-- ====== Package the minify files ===== -->

 <PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles1;    
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
 </PropertyGroup>

 <PropertyGroup>
   <AfterAddIisSettingAndFileContentsToSourceManifest>
    MakeEmptyFolders
   </AfterAddIisSettingAndFileContentsToSourceManifest>
 </PropertyGroup>

<Target Name="CustomCollectFiles1">
  <ItemGroup>
   <!-- =====Controls\Javascript folder ==== -->
    <_CustomFilesForRootFolder Include=".\Controls\Javascript\*.min.js">
    <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)    </DestinationRelativePath>
   </_CustomFilesForRootFolder>
  <FilesForPackagingFromProject Include="%(_CustomFilesForRootFolder.Identity)">
    <DestinationRelativePath>.\Controls\Javascript\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  </FilesForPackagingFromProject>
 </ItemGroup> 
</Target>

【讨论】:

  • 谢谢,我会试一试。不幸的是,当这个问题出现时,我不再工作,但我正在使用相同的原则开始另一个项目,所以我会试一试
【解决方案2】:

另一个问题“Custom app_offline.htm file during publish”为您描述的最终结果提出了一种可能的方法:

我用自己的

app_offline.htm_

解决方案中的文件,得到 发表。然后我的部署脚本 重命名它(删除尾随_) 使其处于活动状态。

然后我可以运行我的数据库脚本/do 然后重命名文件带来的任何东西 网站返回。

【讨论】:

  • 我在问如何阻止 WebDeploy 在完成部署后从我的发布目录中删除文件。在运行 WebDeploy 之前,我已经将文件复制到目录中。但是,由于该文件在部署包中不存在,WebDeploy 将其删除。
  • 是的。我只是想如果这无法实现,那么还有另一种方法可以实现最终目标。反正没关系。
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2012-07-05
  • 2019-03-08
  • 2017-12-31
  • 2015-11-30
相关资源
最近更新 更多