Gewusst wie: Programmgesteuertes Hinzufügen und Entfernen von "Web.config"-Einstellungen

Letzte Änderung: Montag, 27. Dezember 2010

Gilt für: SharePoint Foundation 2010

In Microsoft SharePoint Foundation besteht eine Möglichkeit zum Ändern von web.config-Einstellungen darin, die SPWebConfigModification-Klasse des Microsoft.SharePoint.Administration-Namespaces zu verwenden, der die dynamische Registrierung von Entitäten zulässt. Diese Änderungen werden in der Konfigurationsdatenbank gespeichert, wo sie als eine Art von virtueller web.config-Datei fungieren, die als endgültige Ebene des .config-Dateistapels für die SharePoint Foundation-Webanwendung dient. Die Änderungen werden wirksam, wenn die SPWebService.ApplyWebConfigModifications-Methode aufgerufen wird.

TippTipp

Manchmal werden diese Änderungen auch in die physikalische web.config-Datei geschrieben, aber Änderungen werden von SharePoint Foundation nicht konsistent in die physikalische Datei geschrieben, weshalb diese Datei nicht immer jedes angewendete SPWebConfigModification-Objekt widerspiegelt. Prüfen Sie bei der Problembehandlung von web.config-Änderungen die Eigenschaften SPWebApplication.WebConfigModifications und SPWebService.WebConfigModifications sowie die physikalische Datei.

HinweisHinweis

Code zum Aufrufen von ApplyWebConfigModifications wird nur ausgeführt, wenn er im Benutzerkontext eines Administrators auf dem Front-End-Webserver ausgeführt wird.

HinweisHinweis

Informationen zu einer zweiten Möglichkeit zum Erweitern von web.config-Dateien finden Sie unter Gewusst wie: Erstellen einer ergänzenden .config-Datei.

Beispiel: Hinzufügen einer Einstellung

Im folgenden Beispiel wird die Verwendung der SPWebConfigModification-Klasse zum Registrieren einer benutzerdefinierten Assembly gezeigt.

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

Im Beispiel enthält die Name-Eigenschaft eine XPath-Anweisung, die den Knoten eindeutig identifiziert. Dadurch wird sichergestellt, dass der Datei keine Duplikate des Knotens hinzugefügt werden.

Durch Aufrufen der ApplyWebConfigModifications-Methode wird ein Zeitgeberauftrag zum Bereitstellen der Änderungen in der Serverfarm geplant. Wenn Sie eine web.config-Änderung auf eine bestimmte Webanwendung anwenden möchten, fügen Sie die Änderung der Auflistung von web.config-Änderungen für die Webanwendung hinzu (WebConfigModifications). Sie können z. B. oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification) verwenden, um eine web.config-Änderung der übergeordneten Webanwendung einer bestimmten Website hinzuzufügen. Sie müssen ApplyWebConfigModifications aufrufen, auch wenn Sie eine web.config-Änderung einer einzelnen Webanwendung hinzufügen.

Entfernen von Konfigurationseinstellungen

Der Code zum Entfernen einer Konfigurationseinstellung ist ähnlich, außer dass die Änderung darin besteht, eine Konfigurationseinstellung zu entfernen. Im folgenden Beispiel wird das Entfernen einer Konfigurationseinstellung veranschaulicht. Beachten Sie, dass ApplyWebConfigModifications im Code aufgerufen werden muss.

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

Siehe auch

Aufgaben

Gewusst wie: Erstellen einer ergänzenden .config-Datei

Konzepte

Arbeiten mit Web.config-Dateien