web-dev-qa-db-ja.com

ASP.NET 4.5 MVC Webアプリから.NET Coreに移行する

私はあまり馴染みのない技術の割り当てを受けました-私たちの素敵なウィンドウASP.NET MVC WebアプリはLinux環境で使用できるように変換する必要があります。

私は健康で働いており、絶対に失うことのできない、または頭が転がる(私たちまたは彼らの)ユーザーデータがあります。

私は通常、C#/ ASP.NETの人ではありませんが、タスクに適応できます。私は公式ドキュメント@ http://docs.asp.net/en/latest/getting-started/installing-on-linux.html を読んでいて、このタスクが有効であることを確認できます「.NET CORE(またはモノ)フレームワークをターゲットにする」ことを意味します。

私はググってみましたが、移行するデファクト/簡単な方法はないようです-project.jsonにスラップされた設定で新しいモジュラーセットアップを学んでください!これを手動で試してみる前に、アドバイスしていただける情報はありますか?従うべきいくつかの体系的なプロセス?たぶん、私が事前に読んだはずの「落とし穴」は何でしょうか?

プロジェクトはDIにNHibernateとAutofacを使用しています-かなり標準的なようです。これをLinuxサーバーで実行するためにどれだけの読み取り/実験が必要かを知りたかっただけです-最終的にそれが重要です。

21
JensenB

以下の回答は古くなっていますが、.Net 4.5 MVCアプリケーションを.Net Coreフレームワークに更新するための実用的なソリューションの概要を示しています。NetCoreは本番環境で使用できます

Core CLRとBCLは、生産の準備ができていません。限目。少なくともまだ、おそらく6か月から1年はそうではありません。現時点では、依存関係のサポートは不明です。 Autofacには、clr互換のコアライブラリはありません。彼らでしょうか?それは研究を開始する場所です。彼らはいつですか?しばらくかかる可能性があり、それはあなたの制御の及ばないプロジェクト要件です。

非生産作業でも、.NETコアはまだ非常に初期です。簡単な答えは、上司に6か月待って、何百人もの作業時間やプリプロダクションコードを焼き尽くすのではなく、すべてがうまくいかないようにすることです。もちろんそれは無視される可能性が高いので、ここで私がどうしてもしなければならない場合の今日の進め方を示します。

あなたの質問にはいくつかの変更がまとめられています。 ASP.NET 4.5からASP.NET 5への移行を検討しています。また、新しいフレームワークを対象としています。最後に、新しい環境でソリューションを実行することを計画しています。これらはそれぞれ独立して処理できます(ただし、他の処理より前に処理することはできません)。

フェーズ0) 4.5.1より前の.NetフレームワークのDNXでサポートされているバージョンはありません。 DNVMを使用して、ターゲットにするDNXを選択します。利用できないものを対象にすることはできないため、プロジェクトが現在4.5.1より前の何かを対象にしている場合は、それを更新し、重大な変更がないことを確認してください。修正があり、condebaseが4.5.1以降と互換性がある場合。


フェーズ1) DNVMとDNXは、既存の「完全」な.Net Framework(4.5.1+)と.Net Core(5.0)の両方と互換性があります。 .Net Core 5で実行されているASP.NET 5に直接ジャンプしたくなるかもしれませんが、それは間違いです。 .Net Coreにはdnxベースのプロジェクトが必要であり、dnxベースのプロジェクトも.Net 4.5.1以降をサポートしているため、最初のステップは、asp.net 5で導入された新しいプロジェクト構造に切り替えることです。この時点でドキュメントは質素です。ターゲットは既存のアプリケーション(dnxで実行されている.netフレームワーク4.5.1で実行されているasp.net 4.5です。プロジェクト移行ウィザードがないため、新しいdnxプロジェクトから開始します(asp.net 5 "空"を使用)テンプレート)と既存のコードをコピーします。これはマイナーな変更のように見えるかもしれませんが、Windowsのみのホストにインストールされたフレームワークへのアプリケーションの緊密な結合を壊します。dnx環境でコードベースを実行すると、基盤が整いました他の環境をターゲットにします。

フェーズ2) asp.net 5(MVC 6)に移行します。 「フル」の.netフレームワークをターゲットにし、Windowsで実行します。 .Netコアは、プロジェクトの既存のasp.netバージョン(4.5)をサポートしません(サポートしません)。ただし、asp.net 5は完全なフレームワーク(4.x)とコア(5)の両方と互換性があります。これにより、.netコアに切り替えることなくasp.net 5にアップグレードできます。フェーズ2の最後のターゲットは、dnxの.net 4.xで実行されているasp.net 5を使用するWebアプリケーション(機能)です。はい、まだWindowsにありますが、プラットフォーム間の互換性に近づきつつあります。

フェーズ3) .netコアでサポートされていない既存のBCL参照と依存関係の一覧を取得します。 .netコアでサポートされていない既存のBCL参照をリファクタリングします。 .netコアは完全なフレームワークのサブセットであることを覚えておいてください。幸運になる可能性があり、既存のすべてのコードがそのサブセットを満たしますが、そうでない場合は、.netコアで利用可能なサブセットで同じ機能を実現する方法を見つける必要があります。

依存関係(Autofacなど)の場合、アップグレードが必要になる可能性が非常に高く、解決する必要のある重大な変更がある可能性があります。フェーズ3のターゲットと終わりは、フェーズ2のWebアプリケーションですが、コアbclと互換性のない依存関係はありません。あなたの管理外の最大の要因はサードパーティのパッケージです。 autofacがコアclr互換パッケージをリリースしない場合は、行き詰まっています(または別の方法の使用を検討する必要があります)。

フェーズ4)フェーズ3の終わりは、.netコアに準拠したスタックがあるが、まだ完全なフレームワークをターゲットにしていることを意味します。最後に、ターゲットをコアclrに切り替えます(dnvmは複数のサイドバイサイドランタイム= dnxをサポートします)。この時点ではまだ、変数を1つずつ、ウィンドウに展開します。フェーズ4の終わりに、Windows環境でホストされている.netコアでWebアプリケーションが実行されます。

フェーズ5)。これで、Windowsの依存関係の解決に取り組むことができます。 IISからの移行を最小限に抑えるために、パスの処理がOSに依存しない方法で行われ、Windows固有のリソース(レジストリなど)が呼び出されないようにします。コアのclrとbclはこの時点までに成熟しているはずなので、移動するターゲットを狙う必要はありません。

一度にすべてを実行しようとすることは、私の考えでは災害のレシピです。非常に多くの並行した変更を行うと、機能しないソリューションから開始し、おそらく機能しないままになります。段階的にそれを実行することにより、方法の各ステップで機能的な出力を維持しながら、相互互換性のあるターゲットに向けてソリューションを移行できます。

19
Gerald Davis

これは古い質問ですが、更新する必要があると思います。一部の本番アプリケーションがasp.net mvcをasp.netコアに移行するためです。少しずつ段階的に移行をまとめます。役に立つことを願っています。

はい、可能です。

1)前のプロジェクトと同じ名前で新しい空のASP.NET Core Webアプリを作成します。したがって、名前空間は一致します。

2)_Microsoft.AspNetCore.Mvc_および_Microsoft.AspNetCore.StaticFiles_ NuGetパッケージをインストールします。 ASP.NETランタイムはモジュール式であり、静的ファイルを提供するには明示的にオプトインする必要があります

3).csprojファイルを開き、PrepareForPublishターゲットを追加します。例:

_  <Exec Command="bower install" />
</Target>
_

4)Startup.csファイルを開き、次のようにコードを変更します。

_namespace WebApp1
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}
_

5)Controllersフォルダーを追加します。次に、HomeController.csという名前のMVCコントローラークラスをControllersフォルダーに追加します。

  • ビューフォルダを追加します。
  • Views/Homeフォルダーを追加します。
  • Index.cshtml、MVCビューページをViews/Homeフォルダーに追加します。

中間テストについては、以下を実行してください

Views/Home/Index.cshtmlファイルの内容を以下で置き換えます。

_<h1>Hello world!</h1>
_

6)ASP.NET MVCプロジェクトからの機能の移行。以下を移動する必要があります。

  • クライアント側コンテンツ(CSS、フォント、スクリプト)
  • コントローラー
  • 景色
  • モデル
  • 同梱
  • フィルター
  • ログイン/ログアウト、ID

7)ASP.NET MVC OldControllerからNewControllerに各メソッドをコピーします

8)_About.cshtml_、_Contact.cshtml_、および_Index.cshtml_ RazorビューファイルをASP.NET MVCプロジェクトからASP.NET Coreプロジェクトにコピーします。

9)ASP.NET Coreアプリを実行し、各メソッドをテストします。

10)静的コンテンツの場合_bower.json_という名前のBower構成ファイルをプロジェクトルートに追加します(プロジェクトを右クリックして、[追加]> [新しい項目]> [Bower構成ファイル])。 BootstrapおよびjQueryをファイルに追加します

11)古いMVCプロジェクトからASP.NET Coreプロジェクトのwwwrootフォルダーにfavicon.icoファイルをコピーします。

12)古いASP.NET MVCプロジェクトのViewsフォルダーからASP.NET CoreプロジェクトのViewsフォルダーに__ViewStart.cshtml_ファイルをコピーします。 __ViewStart.cshtml_ファイルは、ASP.NET Core MVCでは変更されていません。

13)ビュー/共有フォルダを作成します。

14)__Layout.cshtml_ファイルを古いASP.NET MVCプロジェクトのViews/SharedフォルダーからASP.NET CoreプロジェクトのViews/Sharedフォルダーにコピーします。

15)以下のようなニュースでかみそりビューのいくつかの古い機能を変更します

  • _<link>_をロードするには、@Styles.Render("~/Content/css")を_bootstrap.css_要素で置き換えます
  • @Scripts.Render("~/bundles/modernizr")を削除します。 @Html.Partial("_LoginPartial")行をコメント化します(行を_@*...*@)_で囲みます。
  • @Scripts.Render("~/bundles/jquery")を_<script>_要素に置き換えます。
  • @Scripts.Render("~/bundles/bootstrap")を_<script>_要素に置き換えます。
7
orhun.begendi

ここで懸念を混ぜていると思います。最初の問題ステートメントは、現在Linuxで実行する必要があるWindowsで実行されているMVCアプリケーションがあることです。それ自体は問題ではありません。次に、それを調査したと言い、Linuxでサイトを使用するにはASP.Net 5(コア)をインストールする必要があるという結論に達しましたが、これは誤りです。

ASP.Net MVCプロジェクトは Mono で正常に実行されます。

Monoは、C#のECMA標準と共通言語ランタイムに基づくMicrosoftの.NET Frameworkのオープンソース実装です。

そうは言っても、Monoはオープンソースの実装です。 ASP.Net 5はMicrosoftの公式製品ですが、既存のコードベースとの直接的な下位互換性はありません。また、Mono上で実行されます。

Monoの使用が許容できるかどうかを判断するには、プロジェクトマネージャーで要件を評価する必要があります。一部のデリケートな分野(たとえば、ヘルスケア)では、オープンソースは広く受け入れられていません。 Mono Frameworkはオープンソースですが、Mono Framework内で実行されるアプリケーションはそうではないことを説明する準備をしてください。ただし、一般的に、Linuxを採用している組織は、必要かどうかにかかわらず、思っている以上にオープンソースソフトウェアを使用しています。

結論として、Mono Frameworkを使用してコードベースに多くの変更を加えることなく、LinuxでMVCアプリを確実に実行できます。公式のMicrosoft ASP.Net 5 Linuxディストリビューションを使用することがプロジェクトの要件である場合は、LinuxとWindowsのどちらかを考慮する前に、アプリケーションのかなりの部分をとにかく書き直すことになります。

また注意すべき別の補足として、ASP.Net 5はほぼ完全にMicrosoftのオープンソースであるため、Monoの使用に対する議論はおそらく言及された懸念であっても、議論の余地がないかもしれません。

5
Claies