質問: C#のasp.netの複数のWebプログラム上で、設定ファイルをカレントフォルダからの相対パスで読込したいと考えております。 フォルダ構成例は以下でAアプリのイベントからはAアプリのaaa.xmlを参照できる、BアプリのイベントからはBアプリのaaa.xmlが参照できるようにしたいです。 IISルートフォルダ¥ ¥Aアプリ¥Properties¥aaa.xml ¥Bアプリ¥Properties¥aaa.xml 実現できる方式はありますでしょうか? .NET は4.6.2 IISの動作サーバは、Windows Server 2016となります。
回答: IIS + .NET Framework の場合は MapPath を使います。 `カレントフォルダからの相対パス` ではなくて Web ルートからの相対パスで指定します。 ``` string fullpath = Request.MapPath("~/config/aaa.config"); ``` `~/` が アプリケーションの TOP ディレクトリで `IISルートフォルダ¥Aアプリ` の部分に置き換わります。 IIS 管理コンソールで 仮想パスを設定した場合には その仮想パスに対応する実フォルダが参照できます。 ### 重要:セキュリティーの考慮事項 IIS で注意するのは 予期せず その設定ファイルが外部から見えてしまうという事故を防ぐために 設定ファイルの拡張子は `.xml` ではなく `.config` の方がいいと思います。 IIS では デフォルト設定で 拡張子 によって HTTP アクセスが許可、拒否の設定が入っています。 フォルダ単位の 拒否設定を忘れても、拡張子によって拒否されれば、間違ってファイルが外部から見える事が防げます。