System.Web.Configuration.WebConfigurationManager と System.Configuration.ConfigurationManager の動作の違い
-
20-09-2019 - |
質問
ASP.NET Web サイトのテスト サーバーで問題が発生しました。私はふざけて、家を持っていた 既定の Web サイトのディレクトリが間違った場所を指していました。私が試したとき:
ConfigurationManager.ConnectionStrings["connectionString"];
nullが返されましたが、
using System.Web.Configuration;
/* ... */
var rootWebConfig =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;`
正しい接続文字列が返されました。
2 つのアプローチの違いは何ですか?
編集:私が本当に聞きたいのは、なぜそうなるのかということです。 ConfigurationManager
ホーム ディレクトリが正しく設定されていない場合、このアプローチは失敗しますが、それ以外の場合は成功します。 WebConfigurationManager
ホームディレクトリが正しく設定されているかどうかに関係なく、成功しますか?アクセス制御に関する前提条件など、他に違いはありますか?
解決
これを試して:
ConfigurationManager ステートメントがある場所にブレークポイントを置き、イミディエイト出力ウィンドウで次のコマンドを実行します。 ((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation
。私のマシンのレポート ソース: "C:\Users\John\Documents\Visual Studio 2008\Projects\StackOverflowCode\WebApplication1\web.config" 以下に見られるように。
注記:以下は、ASP.NET web.config にアクセスしていることも示しています。
{System.Configuration.ElementInformation}
Errors: {System.Configuration.ConfigurationException[0]}
IsCollection: true
IsLocked: false
IsPresent: true
LineNumber: 17
Properties: {System.Configuration.PropertyInformationCollection}
Source: "C:\\Users\\John\\Documents\\Visual Studio 2008\\Projects\\StackOverflowCode\\WebApplication1\\web.config"
Type: {Name = "ConnectionStringsSection" FullName = "System.Configuration.ConnectionStringsSection"}
Validator: {System.Configuration.DefaultValidator}
そして私が走るとき ConfigurationManager.ConnectionStrings.ElementInformation
分かりました ソース:ヌル これは私のWebアプリにとっては正しいです。
設定ソースパスから何が得られますか?
即時仮定
ConfigurationManager.ConnectionStrings["connectionString"];
Web アプリケーションのルート web.config と必ずしも同じではない構成の場所を探す場合があります。おそらく、Windows ディレクトリ (別の場所や machine.config など) を探している可能性があります。ただし、これに適切なテストを見つけようとしています。
各経営者の意向
システム構成。構成マネージャー .NET 構成 XML 形式にアクセスできます。つまり、次の両方を読み取ります。
- Web 設定 (つまり、ASP.NET の web.config ファイル)
- および非 Web 構成 (例:app.config ファイル - スタンドアロン コンソール アプリ、Windows アプリなど)
構成のタイプに共通する側面を表します。これは汎用の構成マネージャーです。 (ただし、両方のタイプの構成を確認できるこの機能にもかかわらず、次に説明するように、Web マネージャーは Web 構成専用であるため、この機能をアプリ構成に使用する必要があります...)
システム.Web.構成。Web構成マネージャー ほぼ同じことを行いますが、構成マネージャーの「Web 化」バージョンであり、構成の ASP.NET Web 固有の側面へのアクセスを提供します (例:ASP.NET の web.config ファイル)。
類似点
メンバー間の類似点を参照してください 構成マネージャー。* そして WebConfigurationManager.*
両方のマネージャーは、たとえば、 AppSettings
財産と ConnectionStrings
財産。実際、これらの設定はどちらも両方の種類の構成に共通であり、XML ドキュメント内の同じレベルに配置されています。
ですので、似ている点も多々ありますが、
行動の違い
設定へのアクセス:ConfigurationManager には、スタンドアロン アプリの構成を開くメソッドがあります (つまり、Myprogram.EXE の App.config) は、EXEC アプリに相対的なものですが、WebConfigurationManager には、Web サイト内の Web アプリケーションのルート ディレクトリに相対的な ASP.NET Web 構成を開くメソッドがあります。
ここでは基本的なことを説明します app.config (例えば。ディスクフォルダーから「C:\winapp\app.config」経由で開きます。 構成マネージャー)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings/>
<connectionStrings/>
</configuration>
そして、これが基本です web.config (例えば。Web サイトのルートを意味する「~」経由で開かれました Web構成マネージャー)
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<!-- special web settings -->
</system.web>
</configuration>
類似点に注目してください。Web 設定には追加の要素があることにも注意してください。 system.web
ASP.NET の要素。
これらのマネージャーは次の場所にいます。 違う アセンブリ。
- 構成マネージャー: System.Configuration.dll
- Web構成マネージャー: System.Web.dll
他のヒント
ファーストクラスは、(web.configファイルなど)は、Webアプリケーションのファイルのために(などはapp.configなど)、一般的なクライアントの設定ファイルと第二1へのアクセスを提供しています。