статическое значение в web.конфиг
у меня есть проект, работающий на 2 серверах. 1 testserver с подключением к testDB, и один на реальном сервере, с реальной БД.
единственное, что отличается в каждом из запущенных экземпляров этого проекта, - это веб.конфиг.
что я хочу сделать, это иметь возможность установить значение в интернете.config, bool, который затем может быть прочитан кодом. Это bool будет верно, если приложение находится в режиме тестирования. я бы установил его вручную, проект затем прочитал бы его, и когда это правда, письма, которые приложение будет отправлять, будут храниться внутри, поэтому люди на самом деле не получают почту. Я сделал это раньше, установив public static bool
на global.asax
но в Asp.net MVC все встроено в одну DLL, поэтому я не могу изменить его на развернутом сервере в этом случае.
это возможно? или есть другое решение?
6 ответов
как говорили другие, это то, что веб.конфиг для
<configuration>
<appSettings>
<add key="isInTestMode" value="true"/>
</appSettings>
...
</configuration>
который затем можно получить с помощью WebConfigurationManager
bool isInTestMode = Boolean.Parse(WebConfigurationManager.AppSettings["isInTestMode"]);
если вы заинтересованы только в том, чтобы не отправлять электронные письма при тестировании, то вы можете использовать интернет.config для настройки .NET для сброса писем в локальный каталог, а не для отправки их на почтовый сервер
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\MailDump\" />
<network host="localhost"/>
</smtp>
</mailSettings>
...
</system.net>
это работает, если код не переопределяет параметры почтового SMTP-сервера по умолчанию.
Да, вы можете:
<configuration>
<appSettings>
<add key="TestingMode" value="True" />
</appSettings>
...
</configuration>
Вы можете сделать это, используя что-то вроде этого:
static public String GetWebConfigKey(string appSettingsKey)
{
String value = "";
System.Configuration.AppSettingsReader asr = new System.Configuration.AppSettingsReader();
try
{
value = asr.GetValue(appSettingsKey, System.Type.GetType("System.String")).ToString();
}
catch (KeyNotFoundException knfe)
{
throw new KeyNotFoundException("KeyNotFoundException occured in UtilityLibrary.WebConfig.getWebConfigKey" + knfe.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return value;
}
Я обычно использую перечисление для моих ключей приложения, чтобы сохранить их строго типизированными, и это делает их быстрее и проще искать, а не копаться в интернете.config
почему бы вам не использовать appSettings
?
<configuration>
<appSettings>
<add key="myValue" value="true"/>
</appSettings>
....
вы можете использовать вашу веб.Config для этого используйте appSetting (ConfigurationManager.AppSetting ["Key"])
или, если приложение yuor работает в режиме отладки на тестовом сервере, вы можете сделать это,
#if (DEBUG)
//Debug
#else
//Live
#endif
ASP.Net WebDeploy позволяет автоматически преобразовывать веб-страницы.конфигурации на основе которой выполняется развертывание. например, он может отправить одну строку подключения при развертывании на тестовом сервере и другую строку подключения при развертывании на живом сервере.
Если вы используете Visual Studio 2010, я бы рекомендовал использовать файлы преобразования для преобразования интернета.конфиг. Чем больше различий, тем больше это поможет вам.
шаги высокого уровня:
- создайте новую конфигурацию сборки с помощью configuration manager
- установите значения соответствующим образом в каждом вновь созданном файле конфигурации
- сборка и публикация
- сделано и никогда не нужно помнить, чтобы изменить значения в нескольких файлы конфигурации (разработка, постановка, выпуск и т. д.).