2009-10-21 99 views
1

我有這樣一個類:ConfigurationSettings.AppSettings爲空,拋出空異常

public class RxNormFolderMgr 
{ 
    // properties 
    public string RxNormFolder { get { return ConfigurationSettings.AppSettings["rootFolder"].ToString(); } } 
} 

當我嘗試使用這樣的:

public class TestRxNormFolderManager : ColumnFixture 
{ 
    public string RxNormFolder() 
    { 
     RxNormFolderMgr folderMgr = new RxNormFolderMgr(); 
     return folderMgr.RxNormFolder; 
    } 
} 

我得到一個錯誤:「系統。 Reflection.TargetInvocationException:調用的目標引發了異常---> System.NullReferenceException:未將對象引用設置爲對象的實例。「該AllKeys屬性的AppSettings長度爲零的數組,其中我期待1.

我app.config文件的長度在項目如下:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="rootFolder" value ="C:\RxNorm" /> 
     <!-- Root folder must not end with slash. --> 
    </appSettings> 
</configuration> 

我知道ConfigurationSettings.AppSettings應該過時,我應該使用ConfigurationManager.AppSettings,但我甚至不能編譯。我的項目中有一個對System.configuration(我的機器上的c:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll)的引用,並在我的代碼頂部使用語句。

我正在使用Fitnesse來測試代碼,那是當我得到錯誤。我的理解是,我也應該將app.config文件的副本放在我已經完成的測試夾具項目的Bin> Debug文件夾中。所以,我不知道爲什麼我仍然得到這個錯誤。

請幫忙。

+0

嘗試使用代替COnfigurationSettings'ConfigurationManager' - ,不會幫助?? –

回答

2

當你與FitNesse的測試,實際的可執行文件運行的是「FitServer.exe」這樣的AppSettings在目錄中尋找「FitServer.exe.config」與FitServer.exe生活。所以一個快速和骯髒的解決方案是複製你的app.config並重命名它。

更好的解決方案是指定的應用程序配置如下所述: http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

,或者如果你正在使用fitSharp(這是FitNesse.NET的增強): http://www.syterra.com/Fit/AppConfigFiles.html

6

另外:嘗試使用ConfigurationManager類,而不是 「ConfigurationSettings」:

使用支票NOT NULL第一:

public class RxNormFolderMgr 
{ 
    // properties 
    public string RxNormFolder 
    { 
     get 
     { 
      if(ConfigurationManager.AppSettings["rootFolder"] != null) 
      { 
       return ConfigurationManager.AppSettings["rootFolder"].ToString(); 
      } 
      return string.Empty; 
     } 
    } 
} 

這是一個類庫組件內?那些從不使用自己的app.config - 而是使用主機應用程序的app.config(使用類庫的應用程序)。

馬克

+0

感謝您的反饋,Marc。RxNormFolderMgr類在Service App中,我可以看到如何在空測試中包裝代碼來防止錯誤,但我真的需要弄清楚爲什麼AppSettings是空的,當它包含一個值rootFolder鍵。 – Marvin

0

不要把它在appsettings。使用< connectionStrings>節點

例如:

<的appSettings />

< connectionStrings>節點 <添加名稱= 「NORTHWNDConnectionString」 的connectionString =「數據源= \ SQLEXPRESS; AttachDbFilename = | DataDirectory目錄| \ NORTHWND .MDF;集成安全性= True;用戶實例= True「providerName =」System.Data。。的SqlClient 「/>

</connectionStrings>節點

串cnstr = ConfigurationManager.ConnectionStrings [」 NORTHWNDConnectionString「]的ToString();