Программно изменить 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?
Alex LE

ссылка на статью не работает
Vitall

@AlexLE: Как указать местоположение файла, когда web.config размещается в другом месте. Может быть удаленный сервер на общем пути?
SharpCoder

@SharpCoder, путь - это виртуальный путь, поэтому вам нужно сначала скопировать web.config с удаленного сервера в ваше локальное приложение (внутри временной папки, чтобы не переопределять ваш собственный web.config), отредактируйте его, сохраните и затем скопируйте обратно на удаленный сервер. Или лучшее, более сложное решение: создать API, который выполняет свою работу (изменить файл web.config), развернуть его на удаленном сервере, а затем использовать его с локального сервера.
Гильерме Бранко Страчини

@Skami вы должны установить имя connectionStrings на "MyConnectionString", это означает, что значение section.ConnectionStrings ["MyConnectionString"] должно совпадать с именем.
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();

Как получить идентификатор пользователя из переменной раздела?
Niks

5

Поскольку файл web.config является файлом xml, вы можете открыть web.config с помощью класса xmldocument. Получите узел из этого xml-файла, который вы хотите обновить, а затем сохраните xml-файл.

вот URL-адрес, который более подробно объясняет, как программно обновить файл web.config.

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

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


Я знаю, что это технически возможно, я думаю, что метод, санкционированный / одобренный Microsoft, вероятно, будет более долговечным и менее подверженным нарушению 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.