Azure Web サイトの App Settings にはデフォルトで以下のような設定が追加されています。
aspnet:PortableCompilationOutput と aspnet:DisableFcnDaclRead という設定は名前から ASP.NET に関係する設定ということは分かりますが、これまでに見たことが無かったので調べてみました。
aspnet:PortableCompilationOutput
検索してみると以下の KB がヒットしました。
Hotfix rollup 2803755 is available for the .NET Framework 4.5 in Windows 8 and Windows Server 2012
.NET Framework 4.5 の ASP.NET ビューのコンパイラには、最新版か判断するためにコンパイルを行ったマシンの情報を使う挙動が原因で、コンパイル結果を複数のマシン間で共有できないという問題があるようです。
この設定を追加することで、ポータブルな形でコンパイルが行われるみたいです。オートスケールやフェールオーバーで仮想マシン間をころころと移動する Azure Web サイトでは有効にしておくべき設定でした。*1
aspnet:DisableFcnDaclRead
さっきの設定は名前から割と想像できたんですが、こっちの設定は分かりにくいです。検索してみたところ、特に Hotfix などで追加されたものというわけではなさそうです。
Azure Web サイトはアーキテクチャ的にユーザーデータは SMB でマウントされた Blob に保存されています。ASP.NET アプリケーションは SMB で共有されている仮想ディレクトリ上で動かすと、パフォーマンスの低下や以下のようなエラーが発生することがあるようです。
原因は ASP.NET はファイルの変更監視時に DACL を読み込むみたいですが、この処理が SMB 上だと問題になるみたいです。なので DACL の読み込みをスキップする設定がこれです。
これも Web サイトのアーキテクチャ的に必須な設定ですね。SMB で wwwroot 以下をマウントしている場合には設定を追加しておきましょう。
*1:というか ASP.NET が動く PaaS なら必要な気がしないこともない