以编程方式添加和删除 Web.config 设置

http://msdn.microsoft.com/zh-cn/library/bb861909.aspx

在 Microsoft SharePoint Foundation 中,修改 web.config 设置的一种方法是使用 Microsoft.SharePoint.Administration 命名空间的 SPWebConfigModification 类,这使得您能够动态地对实体进行注册。这些修改保留在配置数据库中,在那里,它们充当一种虚拟 web.config,后者其实上充当 SharePoint Foundation Web 应用程序的 .config 文件堆栈的最后一层。在调用SPWebService.ApplyWebConfigModifications 方法时,所做更改才会生效。

提示提示

有时这些更改也会写入物理 web.config 文件中,但是 SharePoint Foundation 并不总是将所做修改写入物理文件,因此该文件并不总是反映已应用的每个 SPWebConfigModification 对象。在排查 web.config 修改问题时,应检查 SPWebApplication.WebConfigModifications 和 SPWebService.WebConfigModifications 属性以及该物理文件。

注释注释

调用 ApplyWebConfigModifications 的代码只有在前端 Web 服务器的管理员用户上下文中运行时,才能发挥作用。

注释注释

有关用于扩展 web.config 文件的第二种方法的信息,请参阅How to: Create a Supplemental .config File

下面的示例演示如何使用 SPWebConfigModification 类来注册自定义程序集。

 
SPWebService service = SPWebService.ContentService;

SPWebConfigModification myModification = new SPWebConfigModification();
myModification.Path = "configuration/SharePoint/SafeControls";
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']";
myModification.Sequence = 0;
myModification.Owner = "User Name";
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />";
service.WebConfigModifications.Add(myModification);
 
/*Call Update and ApplyWebConfigModifications to save changes*/ 
service.Update();
service.ApplyWebConfigModifications();

在示例中,Name 属性包含一个唯一标识节点的 XPath 语句,这将确保不会向文件添加节点的重复项。

调用 ApplyWebConfigModifications 方法将安排一个计时器作业以在整个服务器场中部署更改。若要将 web.config 修改应用于特定的 Web 应用程序,请将此修改添加到 Web 应用程序的web.config 修改集 (WebConfigModifications) 中。例如,您可以使用 oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification) 将 web.config 修改添加到特定网站的父 Web 应用程序中。即使是将 web.config 修改添加到单个 Web 应用程序,您也仍旧必须调用 ApplyWebConfigModifications

用于移除配置设置的代码都类似,只是您要执行的修改是移除 配置设置而已。下面的示例演示如何移除配置设置。请注意,您的代码必须仍然调用 ApplyWebConfigModifications

 
SPWebConfigModification configModFound = null;
SPWebApplication webApplication = SPWebApplication.Lookup(new Uri("http://localhost/"));
Collection<SPWebConfigModification> modsCollection = webApplication.WebConfigModifications;

// Find the most recent modification of a specified owner
int modsCount1 = modsCollection.Count;
for (int i = modsCount1 - 1; i > -1; i--)
{
    if (modsCollection[i].Owner == "User Name")
    {
        configModFound = modsCollection[i];
    }
}

// Remove it and save the change to the configuration database  
modsCollection.Remove(configModFound);
webApplication.Update();

// Reapply all the configuration modifications
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
posted @ 2012-05-01 23:36  小师傅  阅读(321)  评论(0编辑  收藏  举报