使MSDeploy(Visual Studio)不删除App_Data文件夹,但删除其他所有内容 [英] Make MSDeploy (Visual Studio) not delete App_Data folder but delete everything else

查看:469
本文介绍了使MSDeploy(Visual Studio)不删除App_Data文件夹,但删除其他所有内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Visual Studio的发布按钮来部署我的网站,并在服务器上要一个不同的App_Data文件夹。有一个复选框在目的地留下额外的文件(不要删除)这阻止我的App_Data文件夹被删除,但是最终将积累大量的残留文件作为网站更改。

I'm using Visual Studio's Publish button to deploy my website, and want a different App_Data folder on the server. There's a checkbox for Leave extra files on destination (do not delete) which prevents my App_Data folder from getting deleted, but then it'll eventually accumulate a lot of vestigial files as the website changes.

有没有什么办法可以在AppData删除所有内容时排除App_Data?

Is there any way to make it exclude just App_Data when it deletes everything?

推荐答案

手动调用msdeploy可以完成,只需添加以下参数:

It can be done when you invoke msdeploy manually - just add the following parameter:

-skip:Directory=\\App_Data

请参阅 Web部署操作设置。路径是一个正则表达式,所以它是非常灵活的。

See Web Deploy Operation Settings. The path is a regular expression, so it is quite flexible.

如果使用VS生成的ProjectName.deploy.cmd脚本部署,还可以将此参数传递_MsDeployAdditionalFlags环境变量(运行该脚本时)。

If you deploy using the VS-generated ProjectName.deploy.cmd script, you can also pass this parameter in the _MsDeployAdditionalFlags environment variable (when running that script).

这是我根据自己的需求提供的最好的(我们有类似的情况)。我没有尝试将其与VS的发布按钮集成,因为我们从命令行部署。

This is the best I've come up with for our needs (we have a similar situation as you). I haven't tried integrating it with VS's Publish button, since we deploy from command line.

编辑:

自从我发布了这个答案之后,我已经了解了有关MSDeploy的几件事情,所以我以为我会更新它。

I have learned a few things about MSDeploy since I posted this answer, so I thought I'd update it now.

,上述跳过规则将跳过匹配路径(App_Data)上的任何操作。如果需要更精细的控制,则可以使用更详细的语法。例如,仅跳过删除(在目标服务器上保留任何额外的文件,但添加任何新文件并更新现有的文件):

First of all, the above skip rule skips any operations on the matching path (App_Data). If more granular control is needed, a more verbose syntax is available. For example, to skip only deletes (to keep any extra files on target server, but add any new ones and update existing ones):

-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*'

这将跳过所有文件和所有子文件夹的删除(包含所有内容)在App_Data中,但不会阻止添加和更新。

This skips deletes of all files and all subfolders (with all their content) in App_Data, but doesn't prevent adds and updates.

另一个有用的东西是跳过规则可以在项目文件中定义( .csproj ),以便它们自动包含在与包一起生成的 .deploy.cmd 脚本中。这样就无需通过_MsDeployAdditionalFlags将它们传递给脚本。

Another useful thing is that skip rules can be defined in the project file (.csproj) so that they are automatically included in the .deploy.cmd script generated along with the package. This makes it unnecessary to pass them to the script through _MsDeployAdditionalFlags.

如果以下内容包含在 csproj file:

The above skip rule will be added if the following is included in csproj file:

<PropertyGroup>
  <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
  <ItemGroup>
    <MsDeploySkipRules Include="SkipDeleteAppData">
      <SkipAction>Delete</SkipAction>
      <ObjectName>filePath</ObjectName>
      <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
      <XPath>
      </XPath>
    </MsDeploySkipRules>
    <MsDeploySkipRules Include="SkipDeleteAppData">
      <SkipAction>Delete</SkipAction>
      <ObjectName>dirPath</ObjectName>
      <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
      <XPath>
      </XPath>
    </MsDeploySkipRules>
  </ItemGroup>
</Target>

(名称 AddCustomSkipRules SkipDeleteAppData 是完全任意的; $(_ Escaped_PackageTempDir)应该是可能,但在实践中一直看到它评价为一个空字符串)

(the names AddCustomSkipRules and SkipDeleteAppData are completely arbitrary; $(_Escaped_PackageTempDir) is supposed to be possibly needed, but in practice I've always seen it evaluate to an empty string)

请参阅 Web部署:自定义部署包如何在.csproj文件中设置MSDeploy设置了解更多信息。

See Web Deploy: Customizing a deployment package and How to set MSDeploy settings in .csproj file for more info.

一个警告:这只会将这些规则添加到 .deploy.cmd 脚本,所以如果要使用图形化的IIS管理器进行程序包部署,因为它不会使用该脚本(这同样适用于从VS部署,但我没有检查)。

One caveat: this only adds those rules to the .deploy.cmd script, so it is useless if you want to use the graphical IIS Manager for package deployment, as it doesn't use that script (the same probably goes for deployment from VS, but I haven't checked).

这篇关于使MSDeploy(Visual Studio)不删除App_Data文件夹,但删除其他所有内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆