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


90

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

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


4
そのWebサイトテンプレートは、Webアプリケーションテンプレートと比較して非常にひどいPOSです。私はウェブサイトテンプレートを使用する利点を何も見ていません...
ジェームズ

9
@ジェームズ-私がそこから離れようとしている多くの理由の1つだけ...あなたは合唱団に説教しています...
RSolberg 2009

2
以下のウォークスルーは非常に詳細です(すべてを読んでいませんでした)が、YouTubeの人は、ウェブサイトをウェブアプリに変換する非常に簡単な方法をここに示しました:youtube.com/watch ? v = oXptokM0v7w -as通常、これがすべての人に役立つことは保証できません。この方法は、小規模でそれほど複雑ではないサイトを持つ人々に役立つと思います。
dyslexicanaboko

3
VS2013を使用している場合は、メニュー項目が移動したことを忘れないでください。
2014

回答:


108

まあ、「ウェブサイトに」オプション「ウェブアプリケーションに変換する」は存在しないことがわかりました。「Webアプリケーションに変換」オプションは「Webアプリケーション」にのみ存在します!!!!

【重点鉱山】

だから、これが契約です、変換を行うには、あなたがする必要があります:

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

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

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

  • 最後のステップを繰り返し、「Webアプリケーション」を構築してみてください。「 '....」は不明な名前空間です。アセンブリ参照がありませんか?」のようなエラーが発生し続けます。「....」が、使用するサーバーコントロールの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の仮想フォルダーに設定できます(新しいWebアプリケーションを作成できます) VSのそこから仮想ディレクトリ)。古い「ウェブサイト」が使用していたIIS仮想ディレクトリを使用する場合は、まずそれをIISから削除する必要があります。

  • 更新:ページをテストするときは、「App_Code」フォルダー内のクラス、特にネームスペースのないクラスに最も注意を払ってください。それらは大きな罠になる可能性があります。名前空間を持たない同じ静的クラス内の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」という名前のフォルダーにコードがある場合、同じタイプがVSによって作成されたものとIIS / ASP.NET開発サーバーによって作成されたものの2つのアセンブリに存在するというRUNTIMEコンパイルエラーが発生します。 。それを避けるために。「Old_App_Code」を同じ名前のままにするか、名前を「ANYTHING EXCEPT: "App_Code」に変更します。このような「App_Code」にはコードを配置しないでください

私はこれを以前から知っていましたが、「:website」モデルを長い間使用していなかったので、今は忘れてしまいました:(。


2
リンクが上部で壊れています、エラー500
Sameer Alibhai、

6
また、「コンパイル」ではなく「コンテンツ」としてコピーされるコードファイルを探します
jcolebrand

14
VS2013でこれを行っている方のために、「Covert to Web App」は下部の[Project]メニューに移動しました。
Eric Sassaman、2014

3
@EricSassamanしかし、私にとってはWebサイトプロジェクトにはまったくありません。
NickG 2014年

1
@NickG、正解です。回答の1行目では、ウェブサイトプロジェクトにはありません。ソリューションエクスプローラーでウェブアプリケーションを選択しない限り、[プロジェクト]メニューは存在しません。メニューに「ウェブサイト」が表示されている場合、それはウェブアプリケーションではありません。上記の手順に従って空のWebアプリケーションを作成し、そこにファイルをコピーします。次に、「Webアプリケーションに変換」が新しいWebアプリケーションのプロジェクトメニューにあるはずです。あなたはそれをやりました?
Eric Sassaman、2014年


5

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


3

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に変更する必要があります。また、必須フィールドバリデーターなどのいくつかの表示の変更は、デフォルトではもはや赤いフォントではなく、デフォルトでは黒になります。


アプリのコードファイルが想定どおりに変更されませんでした。手動で名前を変更してから、コンパイルするすべてのcsページを変更する必要がありました。
マイク

3

最初は同じ問題に直面していました。Wrox Professional ASP.NET 4.0ブックをたどった後、私は次のソリューションを見つけました。

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

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

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

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

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


1
Ctrl-shift-Fですべてを削除してから、正規表現の検索オプションを変更し、これを使用してInherits = "(。*)?"
DeadlyChambers 2014年

1
それがInherits = "(。*?)"であることを確認します。他の1つは、最後の引用符まで継承の背後にあるすべてのものを取得します。
DeadlyChambers 14

1
継承しないとデザイナーが名前空間を削除してからクラスを削除するという問題が発生しました。これがもっと簡単だったらいいのに。
DeadlyChambers 2014

3

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

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

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

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

  8. 欠落している依存関係を解決します。
  9. ビルド

0

デフォルトのASP名前空間はもう機能していないようです。そのため、ページの外側からユーザーコントロール.ascxページを呼び出すことができません。それらに名前空間を与え、デフォルトをASPから私の名前空間に変更することは機能するように見えました。

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