none
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

    2016年10月19日 9:20

回答

  • こんにちは。

    少し調べてみましたが、Webデプロイされる際に変換されるもので、
    IIS Express上で実行する際は変換されないような記述を見ました。
    だとすると適用されないのは正しいのではないでしょうか。
    (もしこの情報がそもそも古かったりしたらすみません。)

    代替案として、ビルドプロセスでTransformXmlを実行する方法がありましたがこちらは如何でしょうか。

    http://stackoverflow.com/questions/29094276/using-transformed-web-config-with-iis-express-during-debug

    • 回答としてマーク ないとー 2016年10月20日 1:57
    2016年10月19日 12:41
    モデレータ
  • 解決済みマークがついているので今さらながらのレスかもしれませんが・・・

    開発マシンで ローカル 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
    2016年10月20日 2:36

すべての返信

  • ベースの web.config の内容が web.release.config の内容に従って書き換えられないとダメだと思いますが、開発環境では書き変わってないのではありませんか?

    開発環境の web.config を開いて確認してみてください。Azure サーバー上の web.config が見られれば、それと比較してみてください。

    2016年10月19日 11:02
  • こんにちは。

    少し調べてみましたが、Webデプロイされる際に変換されるもので、
    IIS Express上で実行する際は変換されないような記述を見ました。
    だとすると適用されないのは正しいのではないでしょうか。
    (もしこの情報がそもそも古かったりしたらすみません。)

    代替案として、ビルドプロセスでTransformXmlを実行する方法がありましたがこちらは如何でしょうか。

    http://stackoverflow.com/questions/29094276/using-transformed-web-config-with-iis-express-during-debug

    • 回答としてマーク ないとー 2016年10月20日 1:57
    2016年10月19日 12:41
    モデレータ
  • > IIS Express上で実行する際は変換されないような記述を見ました。

    質問者さんが開発環境で使っているのは IIS Express とは限らないと思うのですが。(ローカル IIS かも)

    2016年10月19日 13:59
  • > IIS Express上で実行する際は変換されないような記述を見ました。

    質問者さんが開発環境で使っているのは IIS Express とは限らないと思うのですが。(ローカル IIS かも)

    Webデプロイの際に変換されるという話であれば、おそらくどちらにしても同じだと思います。

    実際のところ、デバッグ実行ではプロジェクトのフォルダがそのままアプリケーションのフォルダになっている状態なので、仕組み的にもそのままWeb.configで動作させるしかないでしょうし。


    • 編集済み なちゃ 2016年10月19日 23:57
    2016年10月19日 23:56
  • 皆さま、回答ありがとうございます。

    当方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: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
    2016年10月20日 2:36
  • SurferOnWww様、回答ありがとうございます。

    ローカルIIS試してみました。

    VisualStudioでの開発時の実行環境をローカルIISにした場合はダメでしたが、ローカルIISに発行した場合は、おっしゃるとおりWeb.ConfigとWeb.Release.configがマージされ意図した動きになりました。

    使い分けながら開発を進めたいと思います。ありがとうございました!!

    2016年10月21日 0:59