ASP.NET 3.5のWebサイト(ビジュアルスタジオの専門用語)を持っていますが、サイトは成長を続けており、とりわけカウボーイ風に見えています。これがWebアプリケーション(名前空間とすべて)に変換されることを期待しています。
これはVisual Studioで簡単に実行できるものですか?そうでない場合、すべての名前空間などを自動的に作成できる他のツールはありますか?
ASP.NET 3.5のWebサイト(ビジュアルスタジオの専門用語)を持っていますが、サイトは成長を続けており、とりわけカウボーイ風に見えています。これがWebアプリケーション(名前空間とすべて)に変換されることを期待しています。
これはVisual Studioで簡単に実行できるものですか?そうでない場合、すべての名前空間などを自動的に作成できる他のツールはありますか?
回答:
まあ、「ウェブサイトに」オプション「ウェブアプリケーションに変換する」は存在しないことがわかりました。「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」モデルを長い間使用していなかったので、今は忘れてしまいました:(。
あなたのウェブサイトアプリケーションが成長した場合、それをいくつかのプロジェクトに分割する方が良いです。WebサイトプロジェクトからWebアプリケーションプロジェクトへの変換はあまり役に立ちません。
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に変更する必要があります。また、必須フィールドバリデーターなどのいくつかの表示の変更は、デフォルトではもはや赤いフォントではなく、デフォルトでは黒になります。
最初は同じ問題に直面していました。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つのWebサイトプロジェクトをWebアプリケーションに正常に移行できました。注意すべきいくつかの落とし穴があります。
ReSharperを自由に使えるようにすると、aspxファイルのリファクタリングに役立ちます。
public partial class FolderName_Projectname : Page
て、Resharperまたは手動ですべてのファイルの名前を変更しました。のような複数のエラーが発生する場合は"There is already a member Page_Load() defined"
、クラス名が正しくないことと重複していることが原因と考えられますCodeFile
すべてのaspxページをに置き換え、Codebehind
特にサブフォルダーのファイルに注意してください。Inhertis=""
相対パスが含まれていないことを確認してください。名前空間がすべてを処理します。したがって、正しい形式はInherits="Namespace.classname"
です。クラスに名前空間NaSpaとファイル名foo.csがある場合、次のようになります。Inherits="NaSpa.foo"
すべてのファイルを準備したら(マスターページを忘れないでください)、[Webアプリケーションに変換]を実行します。その後エラーが発生した場合は、洗い流して繰り返します。「TextBoxNameが見つかりません。参照がありません」というエラーが発生した場合は、aspxページをサニタイズすることを忘れていないことを確認してください。自動生成されたデザイナファイルを確認することをお勧めします。TextBoxName
そこに表示されない場合、変換は完全に成功していません。