web-dev-qa-db-ja.com

プリコンパイルされたVisualStudio Webページを更新可能にすることと許可しないことの違いは何ですか?

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

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

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

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

22
meltdownmonk

[このプリコンパイル済みサイトを更新可能にする]をオフにすると、コードファイル(.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

19
N0Alias

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

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

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

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

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

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

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

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

6
meltdownmonk