Visual Studio Web Deploy部署Orchard Core时如何排除App_Data文件夹?
解决Orchard Core通过Web Deploy部署时App_Data文件夹被覆盖的问题
以下是几种可靠的解决方案,替代手动移出App_Data的临时方法:
1. 完善pubxml的排除配置
你之前设置的<ExcludeApp_Data>true</ExcludeApp_Data>可能因Web Deploy版本或项目类型限制未生效,可在发布配置文件(.pubxml)中添加更通用的排除规则:
<PropertyGroup> <!-- 排除整个App_Data文件夹 --> <ExcludeFoldersFromDeployment>App_Data</ExcludeFoldersFromDeployment> <!-- 若只需排除特定子文件夹/文件,可替换为如下配置 --> <!-- 排除App_Data下的Sites子文件夹 --> <!-- <ExcludeFoldersFromDeployment>App_Data/Sites</ExcludeFoldersFromDeployment> --> <!-- 排除App_Data下的settings.json文件 --> <!-- <ExcludeFilesFromDeployment>App_Data/settings.json</ExcludeFilesFromDeployment> --> </PropertyGroup>
保存后重新发布,Web Deploy会跳过指定的文件夹/文件。
2. 修改项目文件(.csproj)从根源排除
如果pubxml的配置仍不生效,可直接在项目文件中标记App_Data不参与发布:
<ItemGroup> <!-- 移除App_Data下所有文件的"内容"标记 --> <Content Remove="App_Data\**" /> <!-- 将App_Data下所有文件设为永不复制到输出/发布目录 --> <None Include="App_Data\**"> <CopyToOutputDirectory>Never</CopyToOutputDirectory> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </None> </ItemGroup>
这种方式从项目构建层面排除,优先级高于pubxml的配置,能确保App_Data完全不进入发布包。
3. 配置Web Deploy保留服务器现有文件
在Visual Studio的发布向导中,进入设置标签,找到文件发布选项,勾选:
- 保留目标上的额外文件(不要删除不在源中的文件)
- 可选:勾选仅发布更改过的文件
这会让Web Deploy只更新本地有变更的文件,且不会删除或覆盖服务器上原本存在但本地没有的内容,即便App_Data被包含在发布包中,也不会覆盖服务器上的现有文件。
4. Orchard Core专属:分离可变数据目录(最佳实践)
Orchard Core允许通过配置将App_Data中的可变内容(如站点配置、媒体文件)指向服务器独立目录,彻底避免本地与服务器的文件冲突:
在服务器的appsettings.json中添加路径配置:
{ "OrchardCore": { "OrchardCore_DataProtection": { "Path": "D:\\IIS\\OrchardCoreData\\DataProtection" }, "OrchardCore_Media": { "Path": "D:\\IIS\\OrchardCoreData\\Media" }, "OrchardCore_Sites": { "SitesPath": "D:\\IIS\\OrchardCoreData\\Sites" } } }
配置后,服务器会从指定路径读取/写入数据,本地App_Data中的对应目录可随意修改或删除,部署时完全不会影响服务器上的业务数据。
内容的提问来源于stack exchange,提问作者wentz
相关产品推荐
相关产品推荐

