2

別の ASP.NET アプリケーション (仮想アプリケーション) に設定された仮想ディレクトリを持つ ASP.NET アプリケーション (ルート アプリケーション) があります。仮想アプリケーションがルート アプリケーションの web.config ファイルから値を読み取れるようにするにはどうすればよいですか? WebConfigurationManager.OpenWebConfiguration() クラスを見ていましたが、ルートから 1 レベル上に移動するように指示する方法がわかりません。たとえば、~/web.config に移動して仮想アプリケーションの web.config ファイルを取得するように指示しますが、ルート アプリケーションのファイル構造まで 1 つ上のレベルに移動する必要があります。これは正しいアプローチですか?

どんな助けでも大歓迎です!!

4

4 に答える 4

2

次のように、ConfigurationManager で ExeConfigurationFileMap クラスを使用できます。

string configFile = new FileInfo(Server.MapPath("/Web.config")).Directory.Parent.FullName + "\\Web.config";

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();

fileMap.ExeConfigFilename = configFile;

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

Response.Write(config.AppSettings.Settings["Test"].Value);
于 2009-11-02T17:43:16.277 に答える
1

IIS は、その構成データ (MSDN および/または Technet で文書化されています) へのプログラムによるアクセスを持っています。これがサポートされる唯一のルートになります (つまり、IIS のバージョン間で引き続き機能します)。

それ以外の場合は、解決策をハックできます (これらはどちらも、プロセスに対して通常よりも高い権限が必要です)。

  • からの出力を解析しますappcmd.exe

    例:

    > C:\Windows\system32\inetsrv\appcmd.exe list vdir
    VDIR "Default Web Site/" (physicalPath:E:\Dev\weblocal\XYZ)
    VDIR "Default Web Site/DevRoot/TestWebClient" (physicalPath:E:\Dev\Tests\ClientSideWeb)
    VDIR "Default Web Site/Home" (physicalPath:E:\Data\Homepages)
    
  • から構成を直接読み取りますC:\Windows\System32\inetsrv\config

于 2009-11-02T17:43:17.587 に答える
0

希望する動作が実際にはデフォルトの動作であることがわかると思います。

web.config 設定はカスケード ダウンします。値が見つからない場合、アプリは次の階層 web.config を検索します。

これにより、ほとんどの場合、AppSettings などを介して検索するだけで済みます。

さまざまな config api アクセス方法ではなく、ファイルに直接アクセスする必要がある場合はどうなるかわかりません。

複数の仮想アプリが構成されたIIS7を使用して、現在このようなセットアップを行っています。

于 2009-11-02T18:48:18.423 に答える
-1

HectorMac の提案をもう一度試してみましたが、それでもうまくいきません。その結果、値を web.config ファイルに保存する代わりの方法を探します。

于 2009-11-16T15:13:11.347 に答える