トップ回答者
VSでリリースビルド実行してもWeb.release.configが反映しない

質問
-
ASP.NET MVC5でWebアプリケーションを作成しています。
リリースビルド時のみ、非公開にしたいフォルダがあるので、web.release.configに以下の実装をしました。
<configuration> <system.webServer> <security> <requestFiltering> <hiddenSegments> <add segment="Hoge" xdt:Transform="Insert"/> </hiddenSegments> </requestFiltering> </security> </system.webServer> </configuration>
この状態で、アプリをAzure上で公開するとHogeにアクセスできなくなりました。
しかし、VSの開発環境でリリースモードビルドして実行(デバッグ開始/デバッグなしで開始ともに)した場合は、Hogeが非公開になりません。
何故でしょうか?
開発環境:VS2015update3
回答
-
こんにちは。
少し調べてみましたが、Webデプロイされる際に変換されるもので、
IIS Express上で実行する際は変換されないような記述を見ました。
だとすると適用されないのは正しいのではないでしょうか。
(もしこの情報がそもそも古かったりしたらすみません。)代替案として、ビルドプロセスでTransformXmlを実行する方法がありましたがこちらは如何でしょうか。
- 回答としてマーク ないとー 2016年10月20日 1:57
-
解決済みマークがついているので今さらながらのレスかもしれませんが・・・
開発マシンで ローカル IIS が使えれば、ローカル IIS に Web 発行すれば期待通り書き換えてくれるかもしれません。
自分は未検証・未確認ですが、このフォーラムで、ローカル IIS に発行してそれから FTP クライアントを利用して Azure のサーバーにアップロードしていると言う人がおられますので、うまく行く可能性は結構あると思います。
開発マシンでローカル IIS が使えれば、開発時にも IIS Express ではなく IIS を利用するのがよさそうです。開発環境(IIS Express)では動いたが運用環境(IIS)では動かないという問題を未然に防ぐことができますので(よくある原因がワーカープロセスのアクセス権の違い)。
IIS Express と IIS では使用する applicationHost.config が異なる点に注意してください。
使用する applicationHost.config で、
<section name="requestFiltering" overrideModeDefault="Deny" />
という設定がされているとすると、当該 Web アプリの web.config で requestFiltering 要素を書き換えるとサーバーエラーになります。- 回答としてマーク ないとー 2016年10月21日 0:59
すべての返信
-
こんにちは。
少し調べてみましたが、Webデプロイされる際に変換されるもので、
IIS Express上で実行する際は変換されないような記述を見ました。
だとすると適用されないのは正しいのではないでしょうか。
(もしこの情報がそもそも古かったりしたらすみません。)代替案として、ビルドプロセスでTransformXmlを実行する方法がありましたがこちらは如何でしょうか。
- 回答としてマーク ないとー 2016年10月20日 1:57
-
-
皆さま、回答ありがとうございます。
当方IIS Expressを使っています。これも書かなければいけませんでしたね、失礼しました。
以下のブログでも本件についての記載を見つけました。やはりだめみたいですね。
http://blog.shibayan.jp/entry/20110507/1304694517
また、Tak1wa様にご紹介頂いた方法を試したら、意図した動作が実現できました。
ただ、Web.configファイル自体を書き変えてしまうために、Web.Release.configで処理した内容の逆をWeb.Debug.Configで書く必要がありますね。
例えば、<compilation xdt:Transform="RemoveAttributes(debug)" />と<compilation debug="true" xdt:Transform="SetAttributes(debug)" />という感じに。
- 編集済み ないとー 2016年10月20日 1:58
-
解決済みマークがついているので今さらながらのレスかもしれませんが・・・
開発マシンで ローカル IIS が使えれば、ローカル IIS に Web 発行すれば期待通り書き換えてくれるかもしれません。
自分は未検証・未確認ですが、このフォーラムで、ローカル IIS に発行してそれから FTP クライアントを利用して Azure のサーバーにアップロードしていると言う人がおられますので、うまく行く可能性は結構あると思います。
開発マシンでローカル IIS が使えれば、開発時にも IIS Express ではなく IIS を利用するのがよさそうです。開発環境(IIS Express)では動いたが運用環境(IIS)では動かないという問題を未然に防ぐことができますので(よくある原因がワーカープロセスのアクセス権の違い)。
IIS Express と IIS では使用する applicationHost.config が異なる点に注意してください。
使用する applicationHost.config で、
<section name="requestFiltering" overrideModeDefault="Deny" />
という設定がされているとすると、当該 Web アプリの web.config で requestFiltering 要素を書き換えるとサーバーエラーになります。- 回答としてマーク ないとー 2016年10月21日 0:59