私はこの例外ハンドラを終了しようとしています:
if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
string pathOfActiveConfigFile = ...?
throw new ConfigurationErrorsException(
"You either forgot to set the connection string, or " +
"you're using a unit test framework that looks for "+
"the config file in strange places, update this file : "
+ pathOfActiveConfigFile);
}
この問題は、nUnitを使用している場合にのみ発生するようです。
これを試して
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
それが役に立てば幸い
厳密に言えば、単一の構成ファイルはありません。 ASP.NETを除外する1 組み込み(System.Configuration
)サポートを使用する3つの構成ファイルが存在する場合があります。マシン構成に加えて:app.exe.config
、ユーザーローミング、およびユーザーローカル。
「グローバル」構成(exe。config)を取得するには:
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
.FilePath
使用ごとのローミング設定ファイルと非ローミング設定ファイルには、異なる ConfigurationUserLevel
値を使用します。
1 子フォルダー(IIS仮想またはファイルシステム)web.config
のコンテンツが(設定に応じて)親のweb.config
に追加またはオーバーライドできる完全に異なるモデルを持っています。
NUnitを使用するときにnullリターンのみを取得する場合は、おそらくConnectionString値をアプリケーションのapp.configからテストライブラリのapp.configにコピーする必要があります。
テストローダーによって実行されると、実行時にテストアセンブリが読み込まれ、アプリケーションの構成ファイルではなく、独自のapp.config(コンパイル時にtestAssembly.dll.configに名前が変更されます)が検索されます。
実行しているアセンブリの場所を取得するには、試してください
System.Reflection.Assembly.GetExecutingAssembly().Location
ファイルのプロパティをクリックし、「常にコピー」に設定することを確認してください。そうしないと、必要な場所を設定してカウベルを追加するために、幸せなlil DLLのDebug \フォルダーにありません
ユニットテストプロジェクトが、本番コードプロジェクト(もちろんDOH)に関連付けられたapp.configではなく、そのプロジェクトのapp.configを参照していることに初めて気づいたとき、Prodプロジェクトのポストビルドイベントに行を追加しました。 app.configがテストプロジェクトのbinフォルダーにコピーされます。
問題が解決しました
私はこれまで奇妙な副作用に気づいていませんが、これが正しい解決策であるかどうかはわかりませんが、少なくともうまくいくようです。
私が見たもう1つのオプションがここにありません:
const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);
構成ファイルの場所によっては、System.Reflection.Assembly.GetExecutingAssembly().Location
が必要なことを行う場合があります。
Webアプリ(実際にはローカルで実行されるAzure Webロール)で以前の回答の1つを試しましたが、うまくいきませんでした。ただし、この同様のアプローチは機能しました。
var map = new ExeConfigurationFileMap { ExeConfigFilename = "MyComponent.dll.config" };
var path = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).FilePath;
構成ファイルはC:\ Program Files\IIS Express\MyComponent.dll.configにあることが判明しました。それのための興味深い場所。