6

我有一个 IIS Web 应用程序,其结构大致类似于:

wwww.mysite.com
  file1.asp
  file2.asp
  \DotNet
    file3.aspx
    file3.aspx

我们正在设置 TeamCity 进行自动部署。我有一个部署到 \DotNet 文件夹(aspx 文件)的 MSBuild 构建步骤,在单独的构建配置中,我有另一个部署到根目录(asp 文件)的 MSBuild 构建步骤。

我想允许 MSDeploy 删除不必要的文件,例如,如果我从 VCS 中删除 file2.asp,我希望它从目标 IIS 服务器中删除它。

但是,我不希望它擦除 \DotNet 子文件夹。

我可以得到比命令行开关“SkipExtraFilesOnServer”更精细的东西,还是这是一个全有或全无的交易?

4

3 回答 3

6

事实证明,我的问题的答案比我预期的要简单得多

当通过 MSBuild 使用 MSDeployPublish 目标部署到应用程序的根文件夹时,默认情况下,会删除恰好位于目标 IIS 服务器文件系统上的额外子文件夹。

为了避免这种情况,我只是将我的 DotNet 文件夹的内容移动到 C:\InetPub 下的一个完全独立的位置,但在 IIS Mgr 下保留了我原来的虚拟文件夹/应用程序结构。当然!

现在我可以随心所欲地发布到任一位置,并且一个不会尝试删除另一个,因为一个不再是另一个的文件系统子文件夹。

如果有的话 - 这突出了我们早期的文件夹结构是多么原始,以及我没有意识到的愚蠢。

于 2013-03-27T03:48:51.833 回答
3

我不完全确定你在这里寻找什么。您是否尝试从 dotnet 子文件夹中删除所有文件但保留该文件夹?您是否试图让删除操作永远不会从 dotnet 文件夹中删除任何内容?msdeploy 同步操作非常聪明。msdeploy 将移动所有标记的项目资产,因此假设您不删除 dotnet 文件夹中的文件,那么您应该没问题。

如果您只想免除 dotnet 文件夹的任何删除操作,就好像它根本不属于您的项目,但它位于 Web 服务器的子文件夹中并且您不想触摸它,那么我建议使用跳过msdeploy 中带有通配符的选项。我只将它用于文件,但它也适用于文件夹。它是这样的:

 -skip:objectName=filePath,absolutePath=app_offline\.*

这里有文档: http ://technet.microsoft.com/en-us/library/dd569089%28WS.10%29.aspx

在页面中搜索 -skip:skipAction=

于 2013-03-25T05:49:47.657 回答
2

您还可以添加一个skip带有您希望同步的文件夹名称的设置,例如在以下 msdeploy 调用中:

msdeploy
  -verb:sync 
  -source:contentPath="C:\Data\Personal\My Repo\MSDeploy\MultiSkip\Source" 
  -dest:contentPath="C:\Data\Personal\My Repo\MSDeploy\MultiSkip\Dest" 
  -skip:objectName=dirPath,absolutePath="DotNet"

[我以这个问题的答案为例。]

于 2013-05-02T22:15:53.097 回答