2010-11-09 4 views
2

Я использую приложение динамического веб-сайта Asp.net и не могу сохранить конфигурации в файле web.config.Как сохранить конфигурации в файле web.config?

Я пробовал что-то вроде этого, но не работает!

var configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 

     configuration.AppSettings.Settings["Value"].Value = "Some value"; 
     configuration.Save(); 

Ошибка у меня с

1. OpenWebConfiguration(Server.MapPath(".")) & OpenWebConfiguration(Server.MapPath("~"): 

The relative virtual path 'C:/...' is not allowed here. 

2. OpenWebConfiguration("~") 

    An error occurred loading a configuration file: Failed to map the path '/'. 

Я действительно не знаю, что делать больше.

+2

Вы не хотите изменять свою веб-конфигурацию во время выполнения. Вы заставите свой пул приложений/веб-приложение перезапустить это, и в результате вы потеряете все сеансы и понесете накладные расходы на свой следующий запрос. Вместо этого вы хотите сохранить эти данные в таблице в базе данных. – danielfishr

ответ

2

Из documentation в нем указывается, что передача пустого значения для пути откроет файл web.config по умолчанию.
При взгляде на ваш код не отображается то, что вы на самом деле указываете имя файла конфигурации в своем пути.

Так используйте:

OpenWebConfiguration(null) 

EDIT: Годится Я провел некоторое дальнейшее исследование, и передача нулевого значения приведет к доступу к файлу web.config по умолчанию сервера в папке C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Config, которая в этом случае не является тем, что вы хотите.
Passing «~» должны дать вам доступ к веб-приложений файл web.config по умолчанию, и я проверил это успешно в Visual Studio 2008 с .NET 3.5, используя следующий код:

Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 
    config.AppSettings.Settings["test"].Value = "Hello"; 
    config.Save(); 

Я не знаю, почему это не работает ваше дело. Я бы предложил разместить точку останова в строке кода, где вы создаете свой объект Configuration, и использовать «Immediate Window» в IDE Visual Studio для вызова статического метода OpenWebConfiguration WebConfigurationManager, чтобы узнать, какой результат вы можете получить. Ввод чего-то типа WebConfigurationManager.OpenWebConfiguration("~").AppSettings.Settings.AllKeys должен указывать, если вы успешно используете ваш web.config.

+0

Null помогает, но в следующей строке я получаю сообщение об ошибке «Ссылка объекта не установлена ​​на экземпляр объекта.», Поскольку ключи не читаются. – ledcomp

+0

У вас есть другие идеи? – ledcomp

+0

Можете ли вы дать реальный пример вашего web.config (с одним значением) и кода, который его читает? – Artemiy

0

Используйте приведенный ниже код.

configuration.Save(ConfigurationSaveMode.Full, true);