2011-05-10 56 views
6

我有一个项目在2台服务器上运行。 1个与testDB连接的testserver,以及一个在真实服务器上的真实数据库。web.config中的静态值

在这个项目的每个运行实例中唯一不同的是web.config。

我想要做的是有可能在web.config中设置一个值,一个布尔值,然后可以通过代码读取。如果应用程序处于测试模式,这个布尔将是真实的。我会手动设置它,然后项目会读取它,当它是真实的时候,应用程序将发送邮件,然后将保持内部,所以人们实际上不会收到邮件。我之前在global.asax中设置了public static bool,但是在Asp.net MVC中,所有内容都被内置到一个DLL中,因此我无法在部署的服务器上更改它。

这可能吗?还是会有一个很好的其他解决方案?

回答

16

正如其他人说这是你的网络的appSettings部分。配置是

<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服务器设置,这将工作。

2

为什么不使用appSettings

<configuration> 
    <appSettings> 
     <add key="myValue" value="true"/> 
    </appSettings> 
     .... 
0

ASP.Net WebDeploy允许您根据您要部署到的位置自动转换您的web.config。例如,它可以在部署到测试服务器时发送一个连接字符串,并在部署到活动服务器时发送不同的连接字符串。

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

3

是的,你可以:

<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; 
    } 

我通常使用一个枚举我的应用程序键,让他们强烈键入,它使他们更快,更容易查找,而不是通过web挖掘。配置

+0

捕捉一般异常就是一个不好的例子,如何不捕捉异常。它有什么好处?无论如何,你都有例外,只有你对此知之甚少...... – Martas 2017-06-29 16:57:50

1

你可以用你的web.config要做到这一点,利用appSetting(ConfigurationManager.AppSetting [“钥匙”])

或者,如果上你的应用程序在调试模式下运行测试服务器上,你可以做到这一点,

#if (DEBUG) 

//Debug 

#else 

    //Live 

#endif 
0

如果您使用的是Visual Studio 2010,我会推荐使用Transformation文件来转换web.config。你有更多的差异,这将有助于你。

的高级步骤:

  1. 创建通过配置管理器的新构建配置
  2. 在每个新创建的配置文件中适当设置值
  3. 构建和发布
  4. 完成并永远不会有记得要改变多个配置文件中的值(开发,登台,发布等)。

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