【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();