2

私はこのようなクラスを持っています:

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

「System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というエラーが表示されます。AppSettingsのAllKeysプロパティは、長さが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フォルダーに配置する必要があることを理解しています。だから、なぜ私はまだこのエラーが発生しているのかわかりません。

助けてください。

4

3 に答える 3

7

またConfigurationManager、「ConfigurationSettings」の代わりにクラスを使用してみてください。

最初にNOTNULLのチェックを使用します。

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(クラスライブラリを使用するアプリ)を使用します。

マーク

于 2009-10-21T18:29:51.393 に答える
3

FitNesseでテストしている場合、実行中の実際の実行可能ファイルは「FitServer.exe」であるため、AppSettingsはFitServer.exeが存在するディレクトリで「FitServer.exe.config」を探します。したがって、手っ取り早い解決策は、app.configをそこにコピーして、名前を変更することです。

より良い解決策は、ここで説明されているようにアプリ構成を指定することです: http ://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

または、fitSharp(FitNesse.NETの拡張機能)を使用している場合: http ://www.syterra.com/Fit/AppConfigFiles.html

于 2009-10-21T19:28:50.793 に答える
0

それをappsettingsに入れないでください。<connectionStrings>を使用します

例:

<appSettings />

<connectionStrings> <add name = "NORTHWNDConnectionString" connectionString = "DataSource=。\SQLEXPRESS;AttachDbFilename = | DataDirectory | \ NORTHWND.MDF; Integrated Security = True; User Instance = True" ProviderName = "System.Data.SqlClient" / >>

</ connectionStrings>

string cnstr = ConfigurationManager.ConnectionStrings ["NORTHWNDConnectionString"]。ToString();

于 2010-03-18T14:17:11.143 に答える