Програмно змінити web.config за допомогою C # (.NET)


93

Як я можу змінити / маніпулювати web.configпрограмно за допомогою C #? Чи можу я використовувати об’єкт конфігурації і, якщо так, як я можу завантажити його web.configв об’єкт конфігурації? Я хотів би мати повний приклад зміни рядка з'єднання. Після внесення змін web.configслід записати на жорсткий диск.


Перегляньте його повідомлення в блозі про те, як програмно маніпулювати web.config в ASP.NET 2.0 та ASP.NET 3.5 Як варіант, перевірте це питання, яке відповідає на ваше запитання. Як я можу програмно встановити конфігурацію рядка з'єднання у .net?
Шобан

Відповіді:


115

Ось такий код:

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

Дивіться більше прикладів у цій статті , можливо, вам доведеться поглянути на себе за себе .


Як називається ваш рядок з'єднання у файлі web.config?
Алекс ЛЕ

посилання на статтю порушено
Віталл

@AlexLE: Як ми визначаємо розташування файлу, коли web.config розміщується в іншому місці. Може бути віддаленим сервером на спільному шляху?
SharpCoder

@SharpCoder, шлях - це віртуальний шлях, тому спочатку потрібно скопіювати web.config з віддаленого сервера на локальну програму (всередині тимчасової папки, щоб не змінювати власну web.config), відредагувати її, зберегти і потім скопіювати назад на віддалений сервер. Або кращим, більш складним рішенням буде: створити API, який виконує завдання (змінити de web.config), розгорнути його на віддалений сервер і потім споживати його з локального сервера.
Гільгерме Бранко Страчіні

@Skami вам потрібно встановити ім'я connectionStrings на "MyConnectionString", тобто значення section.ConnectionStrings ["MyConnectionString"] має відповідати імені.
Лякат

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

Як отримати ідентифікатор користувача із змінної розділу?
Нікс

5

Оскільки файл web.config - це файл XML, ви можете відкрити web.config за допомогою класу xmldocument. Отримайте вузол із того xml-файла, який ви хочете оновити, а потім збережіть xml-файл.

ось URL-адреса, яка детальніше пояснює, як можна оновити файл web.config програмно.

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

Примітка: якщо ви внесете будь-які зміни в web.config, ASP.NET виявить ці зміни, і він перезавантажить вашу програму (переробляти пул додатків), і ефект цього зберігається в сесіях, додатках та кеші буде втрачено (якщо припустити стан сесії є InProc і не використовує державний сервер або базу даних).


Я знаю, що це технічно можливо, я думаю, що метод, санкціонований / затверджений корпорацією Майкрософт, швидше за все, буде більш тривалим і менш схильним до порушення web.config. Ми всі оновлювали ці файли «вручну», але я думаю, що це ризиковано при виробництві веб-серверів. Просто мій 2с.
Ентоні Хорн

2

Це метод, який я використовую для оновлення AppSettings, працює як для веб-так і для настільних додатків. Якщо вам потрібно відредагувати connectionStrings, ви можете отримати це значення, System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];а потім встановити нове значення за допомогою config.ConnectionString = "your connection string";. Зауважте, що якщо у вас є якісь коментарі з connectionStringsрозділу в Web.Configцьому, вони будуть видалені.

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

Цей код хороший, і я його схвалив, але він не працюватиме, якщо програму AppSettings визначено в іншому файлі, як, наприклад,: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.