週末、ちょっと意地悪をして、プロジェクトを 2.0 プラットフォームにアップグレードすることにしました。VS2003 と 2005 は共存できるため、この問題は 2005 の Pro バージョンをインストールし、元のプロジェクトを開いてアップグレードするのが比較的簡単です。ウィザードが自動的に表示されます。プロジェクトには 7 つのサブプロジェクトが含まれており、フロントエンド Web プロジェクトの各ファイルはバックグラウンド メソッドの呼び出しのみを実装しており、バックグラウンドでは高度なメソッドは使用されません。アップグレードは非常にスムーズです。
要約すると、Web プロジェクト内のプロジェクト ファイルが削除されました。コンパイル プロセスでは、無関係な 2 つの ASPX ファイルも考慮されていたことが判明しました。それをコンパイルしてサーバーにアップロードし、エラーを報告しました。後で、新しくコンパイルしたプロジェクトには Web プロジェクトの DLL が含まれていないことがわかりましたが、サーバー ディレクトリにはまだ存在していました。その結果、内部参照が混乱してしまいます。古いWebプロジェクトのDllを削除すればOKです。
次に、公開モードを試してみることにしました。VS2005 の生成メニュー項目にある Web サイトの公開機能を使用して、公開先のディレクトリを設定しました。実際には、Web ディレクトリ内のすべてがコピーされました。コンパイルプロセスが非常に遅かった。コンパイルが完了すると、bin ディレクトリに大量のものが生成されました。これらをサーバーにコピーすれば、クリーン コンパイルの必要がなくなると考えました。ページに初めてアクセスしたときに csc プロセスがまだ表示されていることがわかります。 Web サイト全体を切り替えた後も csc プロセスが大量にありましたが、コンパイルプロセスは以前より少し速くなりました。
別の重大な問題が発生しました。しばらくするとプログラムが自動的に再起動され、その後、w3wp.exe プロセスにエラーが発生したことを示すエラー ウィンドウが表示されました。それ? [キャンセル] を選択すると、w3wp.exe が自動的に再起動され、新しいラウンドの再コンパイルが始まります。このプロセスが 3 回発生し、非常に怖くなったので、すぐにバージョン 1.1 に戻しました。イベント ビューアを見てみると、未処理の例外が多数見つかりました。これらは基本的に値が空のエラーでした。不思議なことに、1.1では問題なかったのに、コードは変更されていません。
その後、記事 (中国語では誰も言及していないようです)、 http://www.eggheadcafe.com/articles/20060305.aspを見つけました。 1.1 では、ページ生成に影響しない限り無視します。また、2.0 ではプロセスでエラーが報告され、Web サイト全体の動作に直接影響します。これは深刻な問題のように聞こえますが、より合理的だと思われます。そうしないと、プログラマはこのエラーを無視し続けることになります。しかし、この問題により、Web サイトを切り替えることができないという問題も深刻であるため、スムーズな移行方法が依然として必要です。上で述べたように、この方法は、ハンドルされない例外をすべて処理し、システム イベントに例外情報を記録する HttpModule を自分で作成するもので、プログラマが処理するのに役立ちます。また、この HttpModule のソース コードとバイナリ ファイルのダウンロードも、デモ WebApp を含めて上記で提供されています。
今日、ようやく 2.0 プレデプロイメント リリースのコンパイル方法を理解しました。Web サイトを公開するために VS を使用するのは間違いです。aspnet_compiler.exe を使用して手動でコンパイルする必要があり、そのコンパイル プロセスは Web サイトの実際の設定に基づいています。つまり、Web プロジェクトのコンテンツを Web サイトにアップロードし、IIS で Web サイトのパスを設定してから、aspnet_compile を使用してコンパイルする必要があります。このプロセスでは、生成された DLL を実際に C: に配置します。 WindowsMicrosoft.Net のキャッシュ ディレクトリにあるものは、ユーザーが実際にページにアクセスしたときに csc.exe によって生成されるものとまったく同じです。この手順の後、ユーザーが 2 回アクセスしてもコンパイル アクションは発生しません。
すごく疲れた。ちなみに、私は 2 つの Web サイトが 2 つの異なるディレクトリを参照し、一方にはホスト ヘッダーがなく、もう一方には更新用のホスト ヘッダーがあるというシームレスな切り替え方法を考えました。ホスト ヘッダーを使用して Web サイトを更新した後、aspnet_compiler を使用して Web サイトをコンパイルし、2 つの Web サイトのホスト ヘッダーを切り替えると、新しく訪問したユーザーは新しくコンパイルされた Web サイトにリダイレクトされ、ユーザーは遅延を感じなくなります。次回は別のサイトを更新してください。
http://www.cnblogs.com/unfish/archive/2006/09/10/500230.html