2011-05-10 36 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