「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。


-戻る
--[[.NET Core]]
---[[ASP.NET Core]]
--[[移行・マイグレーション]]
---[[.NETのクロスプラットフォーム対応]]

* 目次 [#u686b37f]
#contents

*概要 [#fe38f2a4]
※ 対象は、[[ASP.NET Core]] 2.0。

-「[[ASP.NET Core]]」のMVCやWebAPIへの移行ノウハウをサマリする。

-下記と異なり、新規作成したテンプレートに、~
UOC(User Own Coding)を移行する形になるため手順は書かない。
--[[.NET Coreへの移行]]
--[[.NET Standardへの移行]]

-従って、ココでは、ひたすら、ASP.NET と ASP.NET Coreの差異について書いて行く。

-また、ASP.NET CoreのフレームワークはMVC6と[[Razor Pages>ASP.NET Web Pages]]で、~
主流が、MVC6なので、殆どの文脈において、ASP.NET Core = ASP.NET MVC Core(MVC6)。

*選定基準 [#ab7cfef1]
**概要 [#w70488ec]
以下に合致するケースに適合する。

-Linuxがサポートする、[[nginx>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?nginx]] + [[Docker>Docker for Windows]]などのクロスプラット フォームで、~
ハイパフォーマンスを実現するマイクロサービスなどの新しいアーキテクチャに対応させたい場合。

-そのような中で、昔から使っているC#/VBなどの言語、Visual Studioの開発環境を使用したい。

**参考 [#o69fa085]
-Microsoft Docs
--ASP.NET と ASP.NET Core の選択~
https://docs.microsoft.com/ja-jp/aspnet/core/choose-aspnet-framework
--サーバー アプリ用 .NET Core と .NET Framework の選択~
https://docs.microsoft.com/ja-jp/dotnet/standard/choosing-core-framework-server
--Docker コンテナー用 .NET Core と .NET Framework の選択~
https://docs.microsoft.com/ja-jp/dotnet/standard/microservices-architecture/net-core-net-framework-containers/

*フォルダ構成 [#xffddb5a]

**Properties [#c4be3fe1]

***launchSettings.json [#n27e559b]
-起動設定、[[構成管理ツール]]には登録されない。
-Visual Studio の [デバッグ] タブには、ファイル編集の GUI がある。
-[[複数の起動設定>#zf8dc3f4]]をCommand Lineで切り替えることができる。

**wwwroot [#f4fa1549]
静的コンテンツを配置する。

-jquery - Add JavaScript Reference in asp.net core - Stack Overflow~
https://stackoverflow.com/questions/42341203/add-javascript-reference-in-asp-net-core

**依存関係 [#i77f9b14]
参照設定を行う。

-[[NuGet>#f51240e8]]
-SDK
--アセンブリ参照
--プロジェクト参照
-アナライザー

**その他のフォルダ [#fe60ea72]

***Controllers [#z5d4b3a1]
MVC6の *.cs or *.vb ファイルが格納される。

***Models [#l10f908a]
MVC6の *.cs or *.vb ファイルが格納される。

***Views [#kbfcc82f]
MVC6の *.cshtml or *.vbhtml ファイルが格納される。

***Pages [#j4bcb793]
[[Razor Pages>ASP.NET Web Pages]]の *.cshtml or *.vbhtml ファイルが格納される。

**その他のファイル [#aee84a74]

***appsettings.json [#ae068f77]
app.configのappSettings SectionをJSON化したもの。

-環境毎に設定を切り替えることができる。
--appsettings.Production.json~
ASPNETCORE_ENVIRONMENT ≠ Development
--appSettings.Development.json~
ASPNETCORE_ENVIRONMENT = Development

-参考
--[[.NET Standardへの移行 > System系ライブラリ > *.config>.NET Standardへの移行#n8baa2a2]]

--Visual Studio 2017 による ASP.NET Core MVC 開発 - Qiita~
https://qiita.com/hiromasa-masuda/items/5b9ff175aac3d1ef6ca6
--ASP.NET Core MVC における構成ファイル appsettings.json からの値取得 - Qiita~
https://qiita.com/hiromasa-masuda/items/d7e33b20d3eedee771f4
--ASP.NET Coreの環境を切り替える方法 - athome-developer’s blog~
http://dblog.athome.co.jp/entry/2016/08/03/113000

***Program.cs [#e29db89b]
Webアプリケーションのエントリポイント

***Startup.cs [#g42f0f08]
-経緯

--.NET Frameworkの[[ASP.NET]]では、
---[[OWIN]]によりStartupがサポートされたが、Global.asaxは生きていたので併用も可能だった。
---例:https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Samples/WebApp_sample/MVC_Sample/MVC_Sample/Startup.cs

--これに対して[[ASP.NET Core]]では、
---Startupは、[[OWIN]]に依存せず、Program.cs の Main経由で読み込まれる。
---このため、完全に、Global.asaxからStartupに移行する必要がある。
---例:

-処理~
[[ミドルウェア>#b38227ce]]をStartupクラスのメソッドで[[注入>#l75d198a]]することにより、活用できるようになる。
--必要に応じて、ConfigureServicesメソッドで規約によって構成オプションを設定する。
--Configureメソッドでアプリケーションの要求処理パイプラインを構成する。

***bundleconfig.json [#q4e3ad8b]
・・・

*パッケージ・マネージャ [#w4347dc8]

**[[NuGet>.NET Standardへの移行#f51240e8]] [#f51240e8]
現在は、[[ASP.NET Core]]の既定のパッケージ・マネージャになっている。

**その他 [#w78e88ba]

***Browser [#q464638b]
昔は、[[ASP.NET Core]]の既定のパッケージ・マネージャだったもよう。

-参考
--Visual Studio - Bower Web 開発用最新ツール~
https://msdn.microsoft.com/ja-jp/magazine/mt573714.aspx
--Visual Studio 2013 で Bower を使う - miso_soup3 Blog~
http://miso-soup3.hateblo.jp/entry/2014/11/26/173021
--ASP.NET Core を始める際に知っておきたい~
Web フロントエンドツールの種類と最新トレンド - tkiryu’s blog~
http://tkiryu.hatenablog.com/entry/2017/02/15/084115

***npm [#e4af8da1]
-昨今、[[上記のBrowser>#q464638b]]より、npmが主流である模様。切り替えできる模様。

-npm はもともと Node.js 上で動作するライブラリを管理するためのもだが、~
Node.js スタイルのライブラリでもブラウザで実行可能な形式に変換して使用~
できるようになったため、npm さえあれば Bower が無くても困らない状況が生まれた。 

-参考~
上の記事はCoreではなくMVC5だが、下の記事でCoreでもイケると解る。
--ASP.NET MVC プロジェクトで npm と Nuget を使い分ける - tkiryu’s blog~
http://tkiryu.hatenablog.com/entry/2016/10/26/121651
--ASP.NET Coreで、bowerじゃなくてnpmから取得したパッケージをwwwrootに入れたい - Qiita~
https://qiita.com/kuluna/items/e1490d9e9d3ca96c8b75

**参考 [#f6608159]
-JavaScript - .NET 開発基盤部会 Wiki > その他 > パッケージ・マネージャ~
https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?JavaScript#i6813c82

*Razor [#s6258614]

**Tagヘルパー [#o6d55285]
従来のHtmlヘルパーは、
 @Html.Label("FirstName", "First Name:", new {@class="caption"}
などと記述していたが、~

Tagヘルパーでは、
 <label class="caption" asp-for="FirstName"></label>
と標準の HTML のように記述できる。

-参考

--ASP.NET Core のタグ ヘルパー~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/tag-helpers/intro

---ASP.NET Core の組み込みタグ ヘルパー~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/tag-helpers/built-in/
---ASP.NET Core でタグ ヘルパーを作成する~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/tag-helpers/authoring

***ScriptTagHelper [#k7a9156e]
-ASP.NET CoreのScriptTagHelperについて調べてみる - Qiita~
https://qiita.com/takasan/items/13fdd17a9254b74046d3

***EnvironmentTagHelper [#pa10e781]
-ASP.NET Core の環境タグ ヘルパー~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/tag-helpers/built-in/environment-tag-helper

*ライブラリ [#d22b8a0b]

**[[System.Web>.NET Standardへの移行#yfe521c8]] [#i5893ae7]

**[[Microsoft.Owin>.NET Standardへの移行#gce2c3f9]] [#gce2c3f9]

*構成 [#r671d85d]

**初期化 [#h3f1560e]

***Web サーバ [#q71c1ade]
-[[launchSettings.json>#n27e559b]]

***スタートアップ [#d80db398]
-[[Program.cs>#e29db89b]]
-[[Startup.cs>#g42f0f08]]
-[[bundleconfig.json>#q4e3ad8b]]

***複数環境の構成 [#zf8dc3f4]
ASPNETCORE_ENVIRONMENT環境変数を使用して複数の構成を初期化できる。

-環境名
--Development
--Staging
--Production

-対象
--[[launchSettings.json>#n27e559b]]の設定
--[[Startup.cs>#g42f0f08]]
---クラス内での各種設定
---クラス.メソッド内での各種設定
--[[EnvironmentTagHelper>#pa10e781]]の利用

-参考
--Microsoft Docs
---ASP.NET Core で複数の環境を使用する~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/environments

**DIのサポート [#l75d198a]
「[[ASP.NET Core における DI]]」を参照。

*ミドルウェア [#b38227ce]
**インジェクション用構成 [#q264650f]

**認証 [#cd9d3413]
-CookieAuthenticationミドルウェア設定でいける模様。
-この場合、[[ASP.NET Core Identity]] + ユーザ・ストアは不要。

-参考
--ASP.NET Core MVC 1.0 で Cookie を使ったユーザー認証を独自に実装する - しばやん雑記~
http://blog.shibayan.jp/entry/20160517/1463476453

*その他 [#xa0e102f]

*旧情報(1.0時代) [#w638852f]

**機能面 [#h4eca79e]
-[[ASP.NET Core]]と[[ASP.NET]] 4.6 は別物

--ASP.NET 4.6:~
従来の[[ASP.NET]]の後継

--[[ASP.NET Core]]:~
次世代の[[ASP.NET]]と呼ばれていたもので、[[.NET Core]]ランタイム上で動作する。

-[[ASP.NET Core]]に[[ASP.NET Web Forms]]は無いので、
--[[ASP.NET Web Forms]]からの移行は不可能。
--[[ASP.NET MVC]](MVC5)からASP.NET MVC Core(MVC6)への移行パスを検討する。

**乗換検討 [#r3fe298f]
立ち位置によってかなり変わってくる。

***旧資産に縛られている場合 [#ef0372db]
旧資産に縛られている場合はなかなか移行できないと思う。

-縛られている場合、[[ASP.NET Core]]に振り切ってイイか?は、

--例えば、[[SaaS開発>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?SaaS%E8%A8%AD%E8%A8%88%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88]]の方でChartControlなどを使っているが、~
[[ASP.NET Core]]ではソコまでの機能拡充がされる気配が今の所無いと思う。~

--[[Linux>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Linuxを触ってみる。]]も必須の要件ではないし、ビジネス・アプリケーションの、~
[[Dynamics CRM]]では[[Web Forms (ASPX)>ASP.NET Web Forms]]が現役だったりする。

>と、個人的には(現段階では、まだ、)結構微妙と考えている。

-[[マイグレーションも困難である模様。>#nb7b70ce]]~
とは言え、時代に追随するためにはどこかのタイミングで飛び移る必要はある気はする。~
しかし、なんとなく、まだ機が熟していないのかな?という感じの情報が散在している。~

***旧資産から解放された場合 [#l4cd5e2a]
旧資産から解放された場合は、思い切ったシフトができると思う。

Windowはエンタープライズでの利用が主であるが、

[[選定基準>#ab7cfef1]]に合致する場合、思い切ったシフトができると思う。

**所感 [#t9c0710b]
-[[下記の参考情報>#lba9bf32]]を参照すると、[[ASP.NET Core]](1.0)は、不安定で変更が多い。

-例えば、細かい話、[[ASP.NET Identity]]のPasswordHasherの実装が違う。~
既存データでウワモノ以降などでは、更に難易度が上がる気配も...。
--
https://aspnetidentity.codeplex.com/SourceControl/latest#src/Microsoft.AspNet.Identity.Core/PasswordHasher.cs
--https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/PasswordHasher.cs

-このように、2017年12月 現在、[[ASP.NET Core]]は、まだ安定しているとはいえないが、

--2017年8月、[[ASP.NET Core]] 2.0に公開され、
--[[ASP.NET MVC]](MVC5)が、2015年2月以降、更新されていないので、

>今後、メインストリーム、新技術サポートが、[[ASP.NET Core]](MVC6)に移っていく可能性がある。

**参考 [#lba9bf32]
-移行事例
--Hello World, [[ASP.NET Core]] 1.0! – とあるコンサルタントのつぶやき~
https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10/
--neue cc - LightNode 2 - OWINから[[ASP.NET Core]]への移植実例~
http://neue.cc/2016/07/28_535.html
--ASP.NET 5、.NET Core への移行作業をしてみた感想 - Qiita~
http://qiita.com/creativewebjp/items/958af200fed9c7bd60ee
--サイトを ASP.NET Core + .NET Core で作り直しました - 😊ソフトウェア開発者のブログ~
https://creativeweb.jp/archive/20160223

-バグ、変更
--開発者を苦しめる.NETのHttpClientのバグと紛らわしいドキュメント~
https://www.infoq.com/jp/news/2016/09/HttpClient
--.NET Core は project.json の廃止を予定している~
https://www.infoq.com/jp/news/2016/08/project-json

***しばやん雑記 [#a2d598d7]
-既存の ASP.NET Web API アプリケーションを ASP.NET Core MVC 1.0 へマイグレーションしてみた~
http://blog.shibayan.jp/entry/20160628/1467113657
-ASP.NET MVC アプリケーションを ASP.NET Core MVC にマイグレーションしようとして挫折した話~
http://blog.shibayan.jp/entry/20160629/1467209826

***clock-up-blog [#y5350769]
-ASP.NET MVC と ASP.NET Core MVC の名前と機能と採用判断の話など~
http://blog.clock-up.jp/entry/2017/07/26/aspnet-core-mvc-start
-.NET Framework 上に構築した ASP​.NET Core プロジェクトのプラットフォームを後から .NET Core に変更する~
http://blog.clock-up.jp/entry/2017/08/16/aspnetcore-platform-change

***[[ASP.NET Core]] on [[.NET Core]] or .NET Framework [#q3aa806b]
[[ASP.NET Core]]のプロジェクト・テンプレートに、
-[[ASP.NET Core]] Web Application ([[.NET Core]])
-[[ASP.NET Core]] Web Application (.NET Framework)

があったが(ASP.NET MVC Core のプロジェクト・テンプレート)、~
時点から サポートプラットフォームは .NET Core のみに絞られた。

-ASP.NET Coreが.NET Frameworkサポートを終了~
https://www.infoq.com/jp/news/2017/06/ASPNET-Core-2

これを使用した場合、OS間の移行(Linux <---> Windows)が可能になる模様。

*参考 [#nb7b70ce]

**移行情報 [#p6d53d28]
***[[.NET Standardへの移行]] [#c97b888a]
***[[.NET Coreへの移行]] [#xd12992f]

***[[ASP.NET Core]] 2.0 移行情報 [#d51f6809]

-Microsoft Docs
--ASP.NET から ASP.NET Core 2.0 への移行~
https://docs.microsoft.com/ja-jp/aspnet/core/migration/proper-to-2x/

--Web サーバ ホスティング
---ASP.NET Core でのホスティング~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/hosting
---ASP.NET Core への Kestrel Web サーバーの実装~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/servers/kestrel

--スタートアップ
---ASP.NET Core でのアプリケーションのスタートアップ~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/startup
---ASP.NET Core で複数の環境を使用する~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/environments

--その他
---ASP.NET Core で複数の環境を使用する~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection#replacing-the-default-services-container

**.NET API Browser [#j6b71fa5]
https://docs.microsoft.com/en-us/dotnet/api/index

***ASP.NET Core API Reference [#j377c636]
https://docs.microsoft.com/en-us/dotnet/api/index?view=aspnetcore-2.0

----
Tags: [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET MVC]], [[:移行]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS