В течение некоторого времени я хранил свои настройки подключения и приложения во внешнем файле и просто ссылаюсь на этот файл через свой web.config. Это работает очень хорошо, потому что позволяет мне хранить отдельные строки подключения и настройки приложения. Это действительно удобно, так как я обнаружил, что во время разработки я часто вношу много изменений в webconfig, и я ненавижу необходимость управлять значениями, специфичными для среды, каждый раз, когда мне нужно обновить свой web.config.

Могу ли я добиться этого с помощью разделов конфигурации SMTP в файле web.config.

16
James Sheldon 30 Апр 2009 в 01:49

3 ответа

Лучший ответ

Конечно, вы можете использовать атрибут configSource.

Примере:

<system.net>
  <mailSettings>
   <smtp configSource="MailSettings.config"/>
  </mailSettings>
</system.net>

Затем поместите данные конфигурации mailSettings в MailSettings.config.

Итак, ваш файл MailSettings.config будет иметь что-то вроде:

    <network 
    host="relayServerHostname" 
    port="portNumber"
    userName="username"
    password="password" />

Обновление : похоже, что для правильной работы может потребоваться действительно войти в узел smtp, поэтому я обновил приведенный выше код, чтобы указать, что - та же идея, только этот должен работать. :)

28
Carson McComas 30 Апр 2009 в 02:19
Прохладный! Я не знал, что ты сможешь это сделать!
 – 
Christian Payne
30 Апр 2009 в 02:04
Это одна из тех функций ASP.NET, о которых я хотел бы знать раньше!
 – 
pyrocumulus
30 Апр 2009 в 02:06
Ааа, я пробовал это раньше, я просто забыл поместить его в узел system.net ... ууу ... Спасибо за внимание.
 – 
James Sheldon
30 Апр 2009 в 02:14
Да, странно, как вы не можете конфисковать элемент mailsettings. Однако один комментарий - я бы сейчас использовал smtp.config, а не mainsettings.config, чтобы избежать путаницы (вы вырываете узел smtp, а не узел mainsettings).
 – 
UpTheCreek
22 Дек 2010 в 14:09
Файл MailSettings.config также должен заключить узел в .
 – 
Ted
9 Апр 2016 в 02:27

Я не уверен, что то, что у меня здесь, предназначено только для более новых версий .NET. Я получил ошибку времени выполнения, используя принятый ответ.

Пожалуйста, обновите принятый ответ с помощью блока кода ниже, если вы работаете с более новыми версиями .NET. Узел smtp также должен быть в отдельном файле, а не только сетевой узел. Весь узел smtp в фактическом файле Web.config заменяется файлом, который вы туда поместили - в отличие от appSettings, где он, кажется, добавляет к нему.

Web.config -

  <system.net>
        <mailSettings>
          <smtp configSource="your-source-file">
          </smtp>
        </mailSettings>
    </system.net>

Ваш файл -

   <smtp from="noreply@example.com">
      <network
        host="your-host"
        port="your-port"
        userName="your-user-name"
        password="your-password"/>
    </smtp>
0
Practical Programmer 24 Мар 2018 в 01:09

Моя программа хранит его в реестре, даже в производственной среде.

-2
Joshua 30 Апр 2009 в 01:53
Зачем веб-приложению хранить это в реестре?
 – 
UpTheCreek
22 Дек 2010 в 14:10
Потому что у нас есть и другие методы удаленного взаимодействия, помимо Интернета.
 – 
Joshua
22 Дек 2010 в 19:13
Я бы рекомендовал не использовать реестр
 – 
Yuki
17 Июл 2013 в 12:05
1
Святая корова. Как сохранить его в реестре и настроить с помощью заранее предоставленной программы, чтобы мы могли ожидать, что пользователи, не являющиеся техническими специалистами, на самом деле будут делать это менее безопасно для приложения, которому в любом случае требуется полное доверие?
 – 
Joshua
17 Июн 2014 в 05:17