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

http://www.iis.net/download/WebDeploy


Если вы используете Visual Studio 2010, я бы рекомендовал использовать файлы преобразования для преобразования интернета.конфиг. Чем больше различий, тем больше это поможет вам.

шаги высокого уровня:

  1. создайте новую конфигурацию сборки с помощью configuration manager
  2. установите значения соответствующим образом в каждом вновь созданном файле конфигурации
  3. сборка и публикация
  4. сделано и никогда не нужно помнить, чтобы изменить значения в нескольких файлы конфигурации (разработка, постановка, выпуск и т. д.).

http://msdn.microsoft.com/en-us/library/dd465318.aspx