如何:以编程方式添加和删除 Web.config 设置
上次修改时间: 2010年12月27日
适用范围: SharePoint Foundation 2010
在 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 类来注册自定义程序集。
Dim service As SPWebService = SPWebService.ContentService
Dim myModification As 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()
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("https://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();
请参阅
任务
How to: Create a Supplemental .config File