让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文件夹。有一个复选框留在目的地多余的文件(不要删除)其中prevents从得到删除了我的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.

有没有什么办法让它只排除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部署操作设置。路径是一个普通的前pression,所以它是非常灵活。

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所有子文件夹(及其所有内容),但不prevent补充和更新。

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 上面跳跃规则将被添加文件:

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部署:自定义部署包和的How设置在.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天全站免登陆