Rei*_*aka 56 asp.net deployment iis msdeploy
我正在使用Visual Studio的Publish按钮来部署我的网站,并希望服务器上有一个不同的App_Data文件夹.有一个复选框Leave extra files on destination (do not delete)可以防止我的App_Data文件夹被删除,但随后它会在网站更改时积累大量的遗留文件.
有没有办法让它在删除所有东西时只排除App_Data?
Jak*_*icz 93
可以在手动调用msdeploy时完成 - 只需添加以下参数:
-skip:Directory=\\App_Data
Run Code Online (Sandbox Code Playgroud)
请参阅Web部署操作设置.路径是正则表达式,因此非常灵活.
如果使用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\\.*'
Run Code Online (Sandbox Code Playgroud)
这会删除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>
Run Code Online (Sandbox Code Playgroud)
(名称AddCustomSkipRules和SkipDeleteAppData完全是任意的; $(_Escaped_PackageTempDir)应该可能需要,但在实践中我总是看到它评估为空字符串)
有关详细信息,请参阅Web部署:自定义部署包和如何在.csproj文件中设置MSDeploy设置.
需要注意的是:这只会将这些规则添加到.deploy.cmd脚本中,因此如果您想使用图形IIS管理器进行软件包部署,它就没用了,因为它不使用该脚本(同样可能是从VS部署,但我没有没检查过.
| 归档时间: |
|
| 查看次数: |
18692 次 |
| 最近记录: |