web-dev-qa-db-ja.com

ASP.NET WebサイトをASP.NET Webアプリケーションに変換する方法

私はASP.NET 3.5 Webサイト(ビジュアルスタジオの専門用語)を持っていますが、このサイトは成長を続けており、とりわけカウボーイ風に見えます。これがWebアプリケーション(名前空間とすべて)に変換されるのを見てみたい。

これはVisual Studioで簡単に実行できるものですか?そうでない場合、すべての名前空間などを自動的に作成できる他のツールはありますか?

83
RSolberg

まあ、オプション「Webアプリケーションに変換」は「Webサイト」には存在しません。「Webアプリケーションに変換」オプションは「Webアプリケーション」にのみ存在します"!!!!

[エンファシス鉱山]

変換を行うには、次のことを行う必要があります。

  • VS 2008ソリューションに新しい「Webアプリケーション」を追加します(ファイル->追加->新しいプロジェクト-> C#-> Web-> ASP.NET Webアプリケーション)。

  • その後、古い「ウェブサイト」のすべてのファイルを新しく作成した「ウェブアプリケーション」にコピーし、デフォルトで作成されたファイルを上書きします

  • 次のステップは最もいです。「Webサイト」の参照を新しい「Webアプリケーション」に「手動で」追加する必要があります。 VS 2008 PowerCommandsおもちゃは、他のプロジェクトタイプから参照をコピーするので、これを行うと思いましたが、そうではありませんでした。自分で手動で行う必要があり、同じアセンブリの複数のバージョン(私の場合はAJAXToolkitなど)またはGACとローカルバージョンの両方を持つアセンブリがある場合、この手順では注意する必要があります。

  • 最後の手順を繰り返し、「Webアプリケーション」の構築を試みてください。 「 '....' is unknown namespace。アセンブリ参照がありませんか?」などのエラーが引き続き発生します。 「....」が、使用するサーバーコントロールのIDに置き換えられるものを除いて、それらのどれも持っていないことを確認してください。つまり、.DESIGNER.CSまたは.DESIGNER.VBファイルがないために存在するエラーのみが発生するまで、参照の追加とプロジェクトのビルドを続けます。

  • その後、VS 2008ソリューションエクスプローラーの「Webアプリケーション」ルートプロジェクトノードに移動し、右クリックすると、「Webアプリケーションに変換」オプションが表示されます。このオプションは、ページとコントロールの「@Page」および「@Control」ディレクティブに実際に小さな変更を加え、必要な.DESIGNER.CSまたは.DESIGNER.VBファイルを作成します。

  • 「Webアプリケーション」を再度ビルドしてください。エラーが発生した場合は、欠落している可能性のある参照を確認し、「Webアプリケーションに変換」をもう一度クリックします。 DESIGNERファイルの欠落に起因するエラー以外のエラーがある場合、すべてのページ/コントロールにそれらのDESIGNERファイルが作成されるわけではありません。 DESIGNER以外の問題を修正して、もう一度「Webアプリケーションに変換」をクリックすると、この作業が行われます。

  • VSビルドが成功したら、準備ができているはずです。 Webアプリケーションのテストを開始します。必要に応じて、VS 2008ソリューションエクスプローラーで「Webアプリケーション」ルートプロジェクトノードを右クリックし、「プロパティ」をクリックして「Web」タブに移動し、「Webアプリケーション」をIISの仮想フォルダーに設定します_(VSでそこから新しい仮想ディレクトリを作成できます)。古い「ウェブサイト」が使用していたIIS仮想ディレクトリを使用する場合は、最初にIISから削除する必要があります。

  • 更新:ページをテストするときは、「App_Code」フォルダー内のクラス、特に名前空間がないクラスに最も注意を払ってください。それらは大きなtrapになる可能性があります。名前空間を持たない同じ静的クラスの2つの拡張メソッドオーバーロードに問題があり、1つはDateTimeを拡張しますか? (Nullable)およびDateTime自体を拡張する別のオーバーロードを呼び出します。他のオーバーロードを拡張メソッドとして呼び出すと、VS 2008のコンパイルに合格し、実行時のみ(IISを使用)コンパイルエラーが発生しました。他のオーバーロードの呼び出しを、拡張メソッドとして呼び出すことから通常の静的メソッドとして呼び出すことへ変更する(同じクラスの呼び出しのみを変更し、他のクラスからの呼び出しは拡張メソッド呼び出しのまま)が、これは解決しましたが、明らかに、そうではありませんVS 2005で使用されていたので安全です。特に、名前空間のないクラスの場合。

  • Update2:変換中に、VS 2008は「App_Code」の名前を「Old_App_Code」に変更します。この新しい名前は見苦しいですが、名前を変更しないでください。 「Webアプリケーション」モデルでは、すべてのコードが1つのアセンブリに含まれます。実行時に、Webサーバーは、使用しているWebプロジェクトの種類を認識しません。 「App_Code」フォルダー内のすべてのコードを取得し、そのための新しいアセンブリを作成します。このように、「App_Code」という名前のフォルダーにコードがある場合、同じタイプが2つのアセンブリ(VSによって作成されたアセンブリとIISによって作成されたアセンブリ)に存在するRUNTIMEコンパイルエラーが発生します/ ASP.NET開発サーバー。それを避けるため。 「Old_App_Code」は同じ名前のままにするか、「App_Code」以外の任意の名前に変更します。そのような「App_Code」フォルダーにコードを配置しないでください。「Webアプリケーション」にそのような名前のフォルダーを配置しないでください。

私は以前からこれを知っていましたが、長い間「ウェブサイト」モデルを使用していなかったため、今では忘れていました:(。

99
Andrew Hare

ウォークスルー:Visual StudioでWebサイトプロジェクトをWebアプリケーションプロジェクトに変換する MSDN

あなたのウェブサイトアプリケーションが成長した場合..それはいくつかのプロジェクトに分割する方が良いです。 WebサイトプロジェクトからWebアプリケーションプロジェクトへの変換はあまり役に立ちません。

12

ビルドする新しいWebアプリケーションプロジェクトの取得に問題がある場合は、Visual Studioのすべての「ヘルパー」クラスのファイルプロパティを確認してください。プロジェクトの場合、ビルドアクションはコンテンツに設定されていましたが、コンパイルする必要がありました。

4
Matt Burrell

最初は同じ問題に直面していました。 Wrox Professional ASP.NET 4.0の本を読んだ後、私は次の解決策を見つけました。

最初に新しいWebアプリケーションを作成しました。すべてのWebサイトファイルをWebアプリケーションフォルダーにコピーしました。アプリケーションを右クリックし、「Webアプリケーションに変換」をクリックします。

WebアプリをWebアプリに変換する必要がある理由を尋ねるかもしれません。答えは、Webサイトを作成するときに、必要な場所で.csファイルをコーディングするだけです。ただし、Webアプリケーションは、コードおよび設計セクションの.design.cs(または.vb)および.csファイルを自動的に宣言します。

次:名前空間がクラスを一元的に参照するので、PAGEディレクティブの 'Inherits'属性など、Webサイトの他のファイルへのすべての手動参照を削除します。

また、プロジェクトにOBJとBINフォルダーを含めなかったため、問題に直面しました。 BINフォルダーとOBJフォルダーが不足していると思われる場合は、ソリューションエクスプローラーで[すべてのファイルを表示]アイコンをクリックし、不足しているフォルダーを右クリックしてプロジェクトに追加します。 (プロジェクトで確実にコンパイルするため。)

PDATE: @deadlychambersがコメントで指摘しているように、「Ctrl + Shift + F」を実行することでどこでも検索でき、Inherits="(.*?)"を検索できます。これにより、すべての出現箇所が検出され、おそらく時間を節約できます。

3
Sunny R Gupta

VS 2010で新しいWebアプリケーションを作成します。
1。 Windowsエクスプローラーを使用して、すべてのファイルをプロジェクトフォルダーにコピーします。
2。 VS 2010ソリューションエクスプローラーでは、すべてのファイルが表示されます。
3。ファイルとフォルダーを選択します-プロジェクトに含めるを右クリックします。
4。プロジェクトソリューションエクスプローラーを右クリックし、[Webアプリケーションに変換]を選択します。

App_Codeフォルダーの名前がold_app_codeに変更されるなど、小さな違いがいくつかあります。驚くほどエラーは発生しません。オブジェクトデータソースのTypeNameと@Pageタグの継承には、[ProjectName]が必要になる場合があります。グローバルに付加されるプレフィックス。たとえば、タイプ名が「BusinessLogic.OrderManager」で、プロジェクト名がInventorySystemである場合、InventorySystem.BusinessLogic.OrderManagerに変更する必要があります。また、必須フィールドバリデーターがデフォルトで赤フォントにならず、デフォルトで黒になるなど、いくつかの表示の変更もあります。

3
Tim Samandari

これで、1つのWebサイトプロジェクトをWebアプリケーションに正常に移行できましたが、いくつか注意すべき点がいくつかあります。

ReSharperを自由に使用できると、aspxファイルのリファクタリングに役立ちます。

  1. ソリューションをセットアップし、空のWebApplicationを作成します
  2. すべてのファイルをコピーします
  3. webサイトプロジェクトのaspxファイルには名前空間がありません。適切な名前空間でクラスをラップします
  4. コピー中に、サブフォルダー内のすべてのページの名前がプロジェクト名とフォルダー名に変更されたため、Resharperを使用するか手動ですべてのファイルの名前を変更する必要がある場合は、_public partial class FolderName_Projectname : Page_が40になりました。 "There is already a member Page_Load() defined"のような複数のエラーが発生する場合、これはおそらく、クラス名の誤りと重複が原因です。
  5. 名前空間を追加した後
  6. すべてのaspxページのCodeFileCodebehindに置き換え、特にサブフォルダーのファイルに注意してください。 _Inhertis=""_に相対パスが含まれていないことを確認してください。名前空間がすべてを処理します。したがって、正しい形式は_Inherits="Namespace.classname"_です。クラスに名前空間NaSpaとファイル名foo.csがある場合、それは_Inherits="NaSpa.foo"_になります

  7. すべてのファイルを準備したら(マスターページを忘れないでください)、「Webアプリケーションに変換」を実行します。その後エラーが発生した場合は、すすいで繰り返します。 「TextBoxNameが見つかりません、参照がありません」という種類のエラーが発生した場合は、aspxページのサニタイズを忘れないようにしてください。適切な指標は、自動生成されたデザイナーファイルを確認することです。 TextBoxNameがそこに表示されない場合、変換は完全に成功していません。

  8. 不足している依存関係を解決します。
  9. 構築する
2
Marco

デフォルトのASP名前空間はもう機能しないようです。したがって、ページ外からUser Controls.ascxページを呼び出すことはできません。名前空間を与え、デフォルトをASP私の名前空間は機能しているようだ。

0
Mike