Ändern Sie eine web.config programmgesteuert mit C # (.NET)

93

Wie kann ich das web.configprogrammgesteuert mit C # ändern / manipulieren ? Kann ich ein Konfigurationsobjekt verwenden und wenn ja, wie kann ich das web.configin ein Konfigurationsobjekt laden ? Ich hätte gerne ein vollständiges Beispiel zum Ändern der Verbindungszeichenfolge. Nach der Änderung web.configsollte das auf die Festplatte zurückgeschrieben werden.

Kottan
quelle
In seinem Blogbeitrag erfahren Sie, wie Sie web.config in ASP.NET 2.0 und ASP.NET 3.5 programmgesteuert bearbeiten. Alternativ können Sie diese Frage überprüfen, die die Antwort auf Ihre Frage enthält. Wie setze ich eine Verbindungszeichenfolgenkonfiguration programmgesteuert in .net?
Shoban

Antworten:

115

Hier ist ein Code:

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

Weitere Beispiele in diesem Artikel finden Sie möglicherweise im Identitätswechsel .

Alex LE
quelle
Wie heißt Ihre Verbindungszeichenfolge in der Datei web.config?
Alex LE
Link zum Artikel ist kaputt
Vitall
@AlexLE: Wie geben wir den Speicherort der Datei an, wenn web.config an einem anderen Speicherort platziert wird? Möglicherweise ein Remote-Server auf einem gemeinsam genutzten Pfad?
SharpCoder
@ SharpCoder, der Pfad ist ein virtueller Pfad. Sie müssen also zuerst die Datei web.config vom Remoteserver in Ihre lokale Anwendung kopieren (in einem temporären Ordner, um Ihre eigene web.config nicht zu überschreiben), bearbeiten, speichern und dann zurückkopieren zum Remote-Server. Eine bessere, komplexere Lösung wäre: Erstellen Sie eine API, die den Job ausführt (change de web.config), stellen Sie sie auf dem Remote-Server bereit und verwenden Sie sie dann vom lokalen Server.
Guilherme Branco Stracini
@Skami Sie müssen den Namen connectionStrings auf "MyConnectionString" setzen. Dies bedeutet, dass section.ConnectionStrings ["MyConnectionString"] mit dem Namen übereinstimmen sollte.
Liakat
12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
ASergan
quelle
Wie erhalte ich die Benutzer-ID von der Abschnittsvariablen?
Niks
5

Da es sich bei der Datei web.config um eine XML-Datei handelt, können Sie die Datei web.config mit der Klasse xmldocument öffnen. Holen Sie sich den Knoten aus der XML-Datei, die Sie aktualisieren möchten, und speichern Sie die XML-Datei.

Hier ist eine URL, die ausführlicher erklärt, wie Sie die Datei web.config programmgesteuert aktualisieren können.

http://patelshailesh.com/index.php/update-web-config-programmatisch

Hinweis: Wenn Sie Änderungen an web.config vornehmen, erkennt ASP.NET diese Änderungen und lädt Ihre Anwendung neu (Anwendungspool recyceln). Dadurch werden die in Sitzung, Anwendung und Cache gespeicherten Daten verloren (unter der Annahme des Sitzungsstatus) ist InProc und verwendet keinen Statusserver oder keine Datenbank).

Shailesh
quelle
Ich weiß, dass dies technisch möglich ist. Ich denke, dass die von Microsoft genehmigte / genehmigte Methode wahrscheinlich länger hält und weniger dazu neigt, die web.config zu beschädigen. Wir haben alle diese Dateien "von Hand" aktualisiert, aber ich denke, dass dies bei Produktionswebservern riskant ist. Nur mein 2c.
Anthony Horne
2

Dies ist eine Methode, mit der ich AppSettings aktualisiere und die sowohl für Web- als auch für Desktopanwendungen funktioniert. Wenn Sie connectionStrings bearbeiten müssen, können Sie diesen Wert von abrufen System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];und dann einen neuen Wert mit festlegen config.ConnectionString = "your connection string";. Beachten Sie, dass Kommentare im connectionStringsAbschnitt Web.Configentfernt werden , wenn Sie Kommentare haben .

private void UpdateAppSettings(string key, string value)
{
    System.Configuration.Configuration configFile = null;
    if (System.Web.HttpContext.Current != null)
    {
        configFile =
            System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    }
    else
    {
        configFile =
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    }
    var settings = configFile.AppSettings.Settings;
    if (settings[key] == null)
    {
        settings.Add(key, value);
    }
    else
    {
        settings[key].Value = value;
    }
    configFile.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
Ogglas
quelle
Dieser Code ist gut und ich habe ihn positiv bewertet, aber er funktioniert nicht, wenn die appSettings in einer anderen Datei definiert sind, wie zum Beispiel: <appSettings file = "C: \ Client \ customSettings.config"> </ appSettings>
Ben Junior