25

デフォルトの「このプリコンパイルされたサイトを更新可能にする」を使用してWebサイトを数回構築しましたが、最新のコンパイルではWebサイトが非常に壊れていました。.dllをいじってみたところ(ビン内でそれらを削除して置き換える)、Webサイトの特定の部分が再び機能し始めていることに気付きましたが、元の.dllをすべてサイトに配置すると壊れていました。

私はいくつかのAjaxWeb拡張機能を備えたaspxページを使用しています。これらは最近追加されたものであり、問​​題の原因である可能性があります。「このプリコンパイル済みサイトを更新可能にする」のチェックを外すと、あらゆる種類の追加のコンパイル済みコードファイルがビンに追加され、Webサイトのすべての問題が解消されました...ここで何が起こっているのでしょうか。違いは何でしたか?

サイトを更新する方法にも違いはないようです。毎回VisualStudioから直接公開するだけです。

任意の洞察をいただければ幸いです。

4

2 に答える 2

23

[このプリコンパイル済みサイトを更新可能にする]をオフにすると、コードファイル(.VB / .CS)だけでなく、.Aspxページがコンパイルされます。チェックしたままにすると、再コンパイルせずにデプロイした後、.Aspxファイルに特定の変更を加えることができます(例=コントロールの位置を移動するか、HTMLマークアップを追加します)。

展開の問題の説明を読んだ後、IISでアプリプールを更新する必要があるためにエラーが発生した可能性が高くなります。ローエンドのVPSでは、その贅沢があれば、バウンス(再起動)するのが理にかなっている場合があります。

サイトの事前コンパイルの詳細については、次のMSDNの記事をお読みください。

http://msdn.microsoft.com/en-us/library/399f057w(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms247286(v=vs.80).aspx

于 2012-08-15T20:31:09.097 に答える
7

NoAliasの発言に基づいて、私自身の質問に対する答えがあります。2つのリンクを読んで、次のことを見つけました。

デプロイメント専用のプリコンパイル
展開専用にプリコンパイルする場合、コンパイラは、通常は実行時にコンパイルされる実質的にすべてのASP.NETソースファイルからアセンブリを生成します。これには、ページ内のプログラムコード、.csおよび.vbクラスファイル、その他のコードファイル、およびリソースファイルが含まれます。コンパイラは、出力からすべてのソースとマークアップを削除します。結果のレイアウトでは、そのページの適切なアセンブリへのポインターを含む.aspxファイル(拡張子は.compiled)ごとにコンパイル済みファイルが生成されます。ページのレイアウトを含めてWebサイトを変更するには、元のファイルを変更し、サイトを再コンパイルして、レイアウトを再デプロイする必要があります。唯一の例外はサイト構成です。サイトを再コンパイルせずに、運用サーバー上のWeb.configファイルに変更を加えることができます。

展開と更新のための
プリコンパイル展開と更新のためにプリコンパイルすると、コンパイラはすべてのソースコード(単一ファイルページのページコードを除く)および通常はリソースファイルなどのアセンブリを生成する他のファイルからアセンブリを生成します。コンパイラーは、.aspxファイルを、コンパイルされた分離コードモデルを使用する単一のファイルに変換し、それらをレイアウトにコピーします。このオプションを使用すると、コンパイル後にサイトのASP.NETWebページに限定的な変更を加えることができます。たとえば、コントロールの配置、色、フォント、およびページの他の外観の側面を変更できます。イベントハンドラーやその他のコードを必要としない限り、コントロールを追加することもできます。サイトを初めて実行するとき、ASP.NETは、マークアップからの出力を作成するために、さらにコンパイルを実行します。ノート

プリコンパイルされた更新可能なサイトでは、複数のページが同じCodeFileクラスを参照することはできません。

最近、サイトに変更を加えて、同じCodeFile(バックグラウンドで同じVBコード)を参照する2つのaspxページを含めました。各ページのhtmlプロパティはわずかに異なりますが、同じCodeFileが必要だったため、2番目のASPページでは削除しました。自動生成されたVBコードファイルは、HTMLで別のCodeFileを参照しました。

上で述べたように、プリコンパイルされた更新可能なサイトでは、複数のページが同じコードファイルクラスを参照することはできません。これが私のページのいくつかが機能していなかった理由です。

この時点から、デフォルトのチェックボックス「このプリコンパイル済みサイトの更新を許可する」の使用を避ける必要があります。私のウェブサイトが私の複数のページを参照しているVBコードファイルを利用するには、チェックを外しておく必要があります。

結論:正しく実行するには、同じCodeFileを参照する複数のaspxページをプリコンパイルする必要があります。これは、サイトに再デプライを行わずに変更を加えることができないことを意味します。

于 2012-08-20T14:18:04.830 に答える