gpt4 book ai didi

asp.net - 使 MSDeploy (Visual Studio) 不删除 App_Data 文件夹,而是删除其他所有内容

转载 作者:行者123 更新时间:2023-12-03 01:24:34 29 4
gpt4 key购买 nike

我正在使用 Visual Studio 的Publish 按钮来部署我的网站,并希望在服务器上有一个不同的 App_Data 文件夹。有一个在目标上保留额外文件(不删除) 的复选框,它可以防止我的 App_Data 文件夹被删除,但随着网站的更改,它最终会积累大量残留文件。

有什么办法让它在删除所有内容时只排除 App_Data 吗?

最佳答案

当您手动调用 msdeploy 时即可完成 - 只需添加以下参数:

-skip:Directory=\\App_Data

参见Web Deploy Operation Settings 。路径是正则表达式,所以相当灵活。

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

这是我针对我们的需求提出的最好的方案(我们的情况与您类似)。我还没有尝试将它与 VS 的“发布”按钮集成,因为我们是从命令行部署的。

编辑:

自从发布此答案以来,我了解了一些有关 MSDeploy 的知识,所以我想现在就更新它。

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

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

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

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

如果csproj文件中包含以下内容,则会添加上述跳过规则:

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

(名称 AddCustomSkipRulesSkipDeleteAppData 完全是任意的;$(_Escaped_PackageTempDir) 应该是可能需要,但在实践中我总是看到它评估为空字符串)

参见Web Deploy: Customizing a deployment package How to set MSDeploy settings in .csproj file了解更多信息。

需要注意的是:这只会将这些规则添加到 .deploy.cmd 脚本中,因此如果您想使用图形 IIS 管理器进行包部署,则它是无用的,因为它不使用该规则脚本(从 VS 部署可能也是如此,但我没有检查过)。

关于asp.net - 使 MSDeploy (Visual Studio) 不删除 App_Data 文件夹,而是删除其他所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289440/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com