公開オプション中の新しいプリコンパイルはMVC4アプリケーションにどのような影響を及ぼしますか?


85

そこで、最近Visual Studio2012をUpdate2に更新しました。次にアプリケーションを公開するときに(この場合はファイル公開を介して)、3つの新しいオプションがあることに気付きました。

  1. 公開する前に既存のファイルをすべて削除する
  2. 公開中のプリコンパイル(構成へのリンク付き)
  3. App_Dataフォルダーからファイルを除外します

最初と3番目のオプションはかなり自明ですが、MVCに適用されるため、2番目のオプションに関するドキュメントは見つかりません。確認したところ、サイトで作成されたファイルに変化は見られず、実際のパフォーマンスにも変化は見られません。


関数の場所は新しい場合がありますが、関数自体はそうではありません。MVCのコンパイルを考慮していなくても、WebFormsはMVCプロジェクトで相互運用可能です。
グラントトーマス

回答:


84

ASP.NETプリコンパイラーを使用すると、MVCアプリに次の影響を与える可能性があります。

  • App_Codeに何かがある場合は、デプロイ前にDLLにプリコンパイルされます。プリコンパイルしないと、これはASP.NETランタイムによってオンザフライで発生します。
  • ページを更新可能にしないオプションを選択した場合(つまり、詳細設定ダイアログの最初のチェックボックスをオフにした場合)、実行時にビュー(ASPXおよびRazor)を動的にコンパイルする代わりに、ビュー(ASPXおよびRazor)もプリコンパイルします。「プリコンパイルされたサイトを更新可能にする」のデフォルト(チェック済み)設定を使用すると、プロジェクト全体を再構築しなくても、ビューのコンテンツを更新できます。

App_Codeにファイルがなく、サイトを更新可能なままにしておきたい場合は、あまり効果がないようです。


7
@Elsimer .cshtmlファイルは引き続き存在しますが、その内容がプリコンパイルされている場合、その内容は「これはプリコンパイルツールによって生成されたマーカーファイルであり、削除しないでください!」に置き換えられます。
ジミー

4
また、パフォーマンスの向上は主に、コンパイラがページごとに動的に呼び出される最初のサイト起動時に発生します。ページが1回ヒット(およびコンパイル)されると、そのコンパイル結果は、プリコンパイルされていなくても、後続のページの読み込みで使用されます。
ジミー

15
ページを更新できないことの追加の利点は、VSがライブサイトに到達する前にビューのタイプエラーを検出することです。
クリス

4
@Chrisは、プリコンパイルオプションがないとこのようなエラーが検出されない場合は、テスト戦略を再検討する必要があります。
user247702 2014年

2
@AndersLindén:コントローラーアクションの実際にレンダリングされた応答をテストするだけです。これによりRazorが呼び出され、例外が生成された場合、テストは失敗します。ただし、これが、コードに対するビューを非常に軽くする必要がある理由でもあります。クラスの場合のように、ビューコードに対してきめ細かい単体テストを実際に行うことはできません。それはほとんど合格または不合格のいずれかであり、それでも、合格とは、例外が生成されなかったことを意味し、実際に想定どおりに実行されたことを意味します。
クリスプラット

0

古い質問ですが、同じような問題に遭遇し、共有する価値があると感じています。

私のエラーメッセージはこの投稿でも同じです。私のプロジェクトはMVC5で、Visual Studio 2013Professionalでビルドします。 コンパイルエラー:タイプ 'ASP.global_asax'が両方のDLLに存在します

私の場合、プリコンパイルオプションを使用すると、binフォルダーにApp_global.asax.dllというファイルがあり、上記のエラーメッセージが表示されます。まず、サーバー上のApp_global.asax.dllを削除し、アプリケーションプールを再起動すると、問題は解決しました。次に、別のアプローチを試しました。プリコンパイルと再公開のチェックを外し、サーバーに再デプロイすると、問題は解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.