質問

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へのアクセスを提供しています。

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