ConfigurationSettings.AppSettingsは空で、null例外をスローします
-
05-07-2019 - |
質問
次のようなクラスがあります:
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();