2013年12月22日日曜日

ASP.NET発行できない時

ASP.NETでファイルシステムとしてWeb発行する場合に失敗するのは、
セキュリティソフトのリアルタイム保護が原因かもしれません。

発生する条件:
    「プリコンパイル済みサイトを更新可能にする」にチェックを入れると発生

発生するエラー: 
    ファイルをコピーできません。要求された操作はユーザーマップセクションで開いたファイルは実行できません

aspnet_compiler の出力先ディレクトリを保護対象から外す設定などすれば
うまくいくことがありますが、勿論セキュリティの観点から問題ないか
会社などに確認の上、実施してください。
(出力先ディレクトリは、「Web発行アクティビティ」の「詳細を表示」を
クリックすれば発行時のアウトプットが表示されるのでそこから
見つけることができます。)

それでもだめなら上記ログ中のaspnet_compiler のコマンドをコピーして、
末尾に「 -f」オプションを付与してコマンドプロンプトで実行する手もあります。

※Visual Studio上で発行しても、ごく稀に発行が成功します。
また、コマンドライン上で実施して失敗したことは今のところありません。
もしかすると、セキュリティソフトとはまた別の原因なのかもしれません。

環境
Windows 7
Visual Studio 2012 update 4

(VS2012 update 4にしてから調子が悪いような気がする。
(Webアプリではなく)Webサイトの発行もウィザード形式になっちゃったし。
update 4 にする前は細かい設定ができる形式だったと思うが。。)

ASP.NET が Internet Explorer の検出に失敗する

ASP.NET (IIS7.5)上のページをIE10で見ようとしたら、「_doPostBack」でエラーが発生。

調べたらユーザーエージェント判定スクリプトの問題だった。
IE10が検出できず、ASP.NETで自動生成する_doPostBack」を含むJavascriptが
取得できてなかったということ。

http://msdn.microsoft.com/ja-jp/library/ie/hh869299(v=vs.85).aspx

パッチ当てて解決。

環境:
Windows Server 2008 R2
IIS7.5
.NET framework 2.0
.NET framework 3.5
.NET framework 4.0

なお、Windows Server 2008 R2 に SP1 を当ててしまうと、上記パッチが
当てられなくなります。

.NET 4.0を使用してるASP.NETページはSP1当てる前からか、SP1当ててからか、
どの段階で対応されてるか調査してませんが、IE10は検出できてました。

しかし、.NET 2.0ページだとSP1当ててからIE10対応パッチを当てようとしても
当てられず、取り残されます。

解決策としては、MSの言うとおり
・適用済みパッチ(SP1)を削除して、上記パッチを当てて、SP1を当てなおす。
とするか、
・.NET 2.0 の ie.browser ファイルをIE10対応版に置換して、
 aspnet_regbrowsers -i コマンドを発行する。
とするか等です。

Service Packとなると、さすがに消すのは怖いので今回は後者を実施しました。
手順:
・SP1未適用マシン(試験機など)にIE10対応パッチ(.NET 2.0用)を適用。
・以下のファイルをノートパッドなどで開き、IE10対応版になってるか確認。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers\ie.browser

 ※ファイル中、「IE10plus」などの記述があればOK。

・以下のフォルダごとコピーして何処かへ退避。
   C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 (32bitも64bitも一緒でしたのでどちらでもよいです。違ってたらそれぞれ
  取得してください。v2.0.xxx の箇所は.NET 2.0 の実際のフォルダを指定
  してください。)
・IE10対応させたいマシンの「Browsers」フォルダを、前手順で取得した
 もので置き換える。(32bit, 64bit 両方とも。)
 32bit :    C:\windows\Microsoft.NET\Framework\v2.0.50727\Config\Browsers
 64bit :    C:\windows\Microsoft.NET\Framework64\v2.0.50727\Config\Browsers

・コマンドプロンプトを開き、以下のコマンドを実行。
cd C:\windows\Microsoft.NET\Framework\v2.0.50727
aspnet_regbrowsers -i

cd C:\windows\Microsoft.NET\Framework64\v2.0.50727
aspnet_regbrowsers -i

以上。