質問

次のようなクラスがあります:

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

エラーが発生します:<!> quot; System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。 --- <!> gt; System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。<!> quot; AppSettingsのAllKeysプロパティは、長さが0の配列で、長さ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 <!> gt; Debugフォルダーに配置する必要があることも理解しています。そのため、なぜこのエラーが引き続き発生するのかわかりません。

助けてください。

役に立ちましたか?

解決

FitNesseでテストしている場合、実際に実行されている実行可能ファイルは<!> quot; FitServer.exe <!> quot;です。したがって、AppSettingsは<!> quot; FitServer.exe.config <!> quot;を探しています。 FitServer.exeが存在するディレクトリ内。そのため、手早く汚い解決策はapp.configをそこにコピーして名前を変更することです。

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

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

他のヒント

また: <!> quot; ConfigurationSettings <!> quot;:

の代わりに ConfigurationManager クラスを使用してみてください

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

マーク

appsettingsに入れないでください。 <!> lt; connectionStrings <!> gt;

を使用します

例:

<!> lt; appSettings / <!> gt;

<!> lt; connectionStrings <!> gt;     <!> lt; add name = <!> quot; NORTHWNDConnectionString <!> quot; connectionString = <!> quot; Data Source =。\ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ NORTHWND.MDF; Integrated Security = True; User Instance = True <!> quot; providerName = <!> quot; System.Data.SqlClient <!> quot; / <!> gt;

<!> lt; / connectionStrings <!> gt;

string cnstr = ConfigurationManager.ConnectionStrings [<!> quot; NORTHWNDConnectionString <!> quot;]。ToString();

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top