因此,我正在尝试部署一个使用 WebConfigModifications 集合更新 web.config 的 Web 应用程序功能。有很多关于执行此操作的信息,包括您遇到的所有问题,因此我对代码非常有信心,但无论我尝试什么,配置元素都不会添加到 Web 配置中。这在开发单服务器环境中工作正常,但在 Farm 中不会更新。
没有错误,没有日志信息,没有事件消息....没有任何指向为什么它不会更新:
SPWebConfigModification appSettingModification = new SPWebConfigModification();
appSettingModification.Name = "添加[@key=\"Key\"][@value=\"Value\"]";
appSettingModification.Path = "配置/应用设置";
appSettingModification.Owner = "所有者";
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;
if (removeModification)
{
app.WebConfigModifications.Remove(appSettingModification);
}
else
{
app.WebConfigModifications.Add(appSettingModification);
}
app.Update();
app.Farm.Services.GetValue<SPWebService>()。
===============================
编辑
我想根据 drax 的建议添加此内容以反映 ApplyWebModifications 方法。此方法位于 Microsoft.SharePoint 程序集的 Microsoft.SharePoint.Administration 命名空间中的 SPWebService 上。
使用此方法的问题之一是所有 web.config 文件都在场中更新,即使实际上没有应用任何修改。即使您不打算更新 Web 配置,这也会导致应用程序池被回收。反思表明为什么会发生这种情况,这很烦人。
该方法内部是一个简短的 foreach 循环:
foreach(this.WebApplications 中的 SPWebApplication 应用程序)
{
application.ApplyWebConfigModifications();
}
它循环遍历每个 Web 应用程序并在 Web 应用程序对象上调用INTERNAL ApplyWebConfigModifications 方法。如果他们只是将此方法公开,那么我们将能够单独调用该方法,而不会影响不受我们更新影响的 Web 应用程序上的应用程序池回收。只是在说'