2013-06-18 7 views
9

私は別のアセンブリの機能を使用するWeb.Apiアプリケーションを持っています。このアセンブリでは、いくつかの文字列を格納する.configファイルを作成しました。dll.configは一時asp.netファイルフォルダにコピーされません

私はこれらの文字列の1フェッチすべき次のコードを使用しています:一時asp.netファイルへ

private static string LogUrl = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["WebApi-LogUrl"].Value.ToString(); 

Assembly.GetExecutingAssembly().Locationポイントを、(C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ dc2fa3d4 \ 834ee436 \ assembly \ dl3 \ cd068512)、dll.configファイルはそこにコピーされません。 その結果、私のアプリケーションをデバッグすることができなくなり、実際のIISサーバー上でコードを実行するとnullが返されます。

設定を取得する直前にブレークポイントを設定すると、一時フォルダを保持できます。そこにdll.configファイルをコピーすると、すべて動作しますが、どのようにすれば自動的に行うのですか。

は私のように設定私のdll.configファイルのプロパティを持っている「アクションをビルドします。コンテンツを」、「出力ディレクトリにコピー:常に」

任意の助けをいただければ幸い、今時間ググています。 !

// The dllPath can't just use Assembly.GetExecutingAssembly().Location as ASP.NET doesn't copy the config to shadow copy path 
var dllPath = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath; 
var dllConfig = ConfigurationManager.OpenExeConfiguration(dllPath); 

// Get the appSettings section 
var appSettings = (AppSettingsSection) dllConfig.GetSection("appSettings"); 
return appSettings.Settings; 

キーがある::(

敬具、 ピーター・ラーション

答えて

17

は、私は次のコードを使用してこれを解決し

new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath 

私はそれを思い付きました解読後の解答Zhaph - Ben Duguidの回答:https://stackoverflow.com/a/2434339/103778

今、私は自分のウェブアプリケーションのbinディレクトリにあるDLLの設定ファイルを受け取ることができます。

私はwritten up a blog post以降これについてさらに議論しています。

+0

私はこれをチェックしなければなりません...提案に感謝します! –

+0

私のために働いた。ヒントをありがとう! –

+0

これは私を助けました。私はまた、CodeBaseプロパティがAssemblyクラスのプロパティであるため、GetName()の呼び出しが役に立たないことにも気付きました。 – sluki

関連する問題