我有一个在2台服务器上运行的项目。 1个测试服务器,连接到testDB,另一个在真实服务器上,带有真正的数据库。
此项目的每个正在运行的实例中唯一不同的是web.config。
我想做的是有可能在web.config中设置一个bool值,然后可以通过代码读取。如果应用程序处于测试模式,则此bool将为true。我会手动设置它,然后项目会把它读出来,当它确实是,应用程序发送的邮件,然后将保留在内部,所以人们实际上不会收到邮件。之前我在public static bool
中设置了global.asax
,但在Asp.net MVC中,所有内容都内置在一个DLL中,所以在这种情况下我无法在部署的服务器上更改它。
这可能吗?还是会有一个很好的其他解决方案?
答案 0 :(得分:18)
正如其他人所说,这是你的web.config的appSettings
部分用于
<configuration>
<appSettings>
<add key="isInTestMode" value="true"/>
</appSettings>
...
</configuration>
然后可以使用WebConfigurationManager
访问bool isInTestMode = Boolean.Parse(WebConfigurationManager.AppSettings["isInTestMode"]);
<强>然而强>
如果您只对测试时不发送电子邮件感兴趣,那么您可以使用web.config配置.NET以将电子邮件转储到本地目录,而不是将它们发送到邮件服务器
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\MailDump\" />
<network host="localhost"/>
</smtp>
</mailSettings>
...
</system.net>
如果您的代码未覆盖默认邮件SMTP服务器设置,则此功能将起作用。
答案 1 :(得分: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;
}
我通常使用Enum作为我的app键来保持它们的强类型,这使得它们更快更容易查找而不是通过web.config
答案 2 :(得分:2)
为什么不使用appSettings
?
<configuration>
<appSettings>
<add key="myValue" value="true"/>
</appSettings>
....
答案 3 :(得分:1)
您可以使用您的Web.Config执行此操作,使用appSetting(ConfigurationManager.AppSetting [“Key”])
或者,如果yuor app在测试服务器上以调试模式运行,则可以执行此操作,
#if (DEBUG)
//Debug
#else
//Live
#endif
答案 4 :(得分:0)
ASP.Net WebDeploy允许您根据部署的位置自动转换web.config。例如,它可以在部署到测试服务器时发送一个连接字符串,在部署到实时服务器时发送不同的连接字符串。
答案 5 :(得分:0)
如果您使用的是Visual Studio 2010,我建议您使用Transformation文件转换web.config。你拥有的差异越多,这对你有所帮助。
高级步骤: