- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-戻る
--[[.NET Standard]]
--[[移行・マイグレーション]]
---[[.NETのクロスプラットフォーム対応]]
* 目次 [#o5a016dc]
#contents
*概要 [#r7faebbc]
下記]の[[移行元>#n17481e6]], [[移行先>#e3670d04]]の、「[[.NET Standard]]」移行ノウハウをサマリする。~
対象は、[[.NET Standard]] 2.0。
-下記の「[[移行元 / 移行先>.NETのクロスプラットフォーム対応#c59bc8d4]]」の、「[[.NET Standard]]」移行ノウハウをサマリする。~
-[[コチラ>.NET Standard#ie8e5050]]に書いた通り、PCLと比べて移行はし易い感じ。
※ [[ただし、.NET Standardは、.NET 6 で廃止予定との事。>.NET Standard#a43793fb]]
*詳細 [#u9084419]
**準備 [#k7f8bf18]
***[[移行プロセスの確認>#ncb5387c]] [#v4769a8c]
***移行性評価の実施 [#z0edc7c9]
必要に応じて、[[移行性評価ツール>.NETのクロスプラットフォーム対応#we621859]]を使用し移行性を評価する。
***[[移行先>.NETのクロスプラットフォーム対応#e3670d04]]プロジェクトを準備する。 [#o36ad6ee]
不要なファイルを削除する。
-packages.config
-Properties\AssemblyInfo.cs
***Projectファイルを準備する。 [#e8f374c4]
-以下のようなProjectファイルを準備する。~
(既存のProjectファイルの中身を以下で置き換えればイイ)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
-[[.NET Standard]]では、配下のSourceファイルが自動で追加される。~
必要に応じて、ファイルやフォルダの除外設定を行う。~
※ netstandardやnetcoreでは、除外されるファイルやフォルダだけがProjectファイルに明記される。
***ProjectをVisual Studioから開く。 [#w8f1924b]
Projectファイルをダブルクリックするか、空のソリューションに追加する。
***Projectの初期設定を行う。 [#tb3a8fcc]
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>XXXX</AssemblyName>
<RootNamespace>YYYY</RootNamespace>
</PropertyGroup>
**[[ポーティング移行>移行・マイグレーション#ue626a7c]] [#d3087e43]
***移行対象ファイルを選別する。 [#j19db7af]
-コンパイル・エラーをチェックしながら移行対象ファイルを選別する。
-クラス・メソッドの有/無については、[[以下の検索システム>#j6b71fa5]]を使用すると良い。
***必要に応じて、NuGetパッケージを追加する。 [#b63d5929]
-「参照無し」が発生したら、NuGetパッケージを確認しインストール。~
NuGetパッケージにnetstandardが含まれるかどうかを確認する。~
([[パッケージを解凍して、中を直接確認>NuGetパッケージの開発と公開#p66307ac]]してもイイ)
-以下のライブラリの移行先をNuGetパッケージから探す。
--[[System系ライブラリ>#s76bf31b]]
---[[System.Configuration.ConfigurationManager>#qcd853ca]]
--System.Data系ライブラリ~
[[ADO.NETデータプロバイダ]]
---System.Data.SqlClient
---System.Data.Odbc
---Npgsql
---MySql.Data
--[[ASP.NET Core系ライブラリ>#odebd8c3]]~
※ ココが比較的、大変。
--[[その他ライブラリ>#sec5fcfd]]
---log4net
---Json.NET
-参考
--.NET Core に移植する - Windows 互換機能パックの使用~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/windows-compat-pack
***必要に応じて、[[ポーティング移行>移行・マイグレーション#ue626a7c]]する。 [#k31bea09]
以下のPlatformやLibraryに依存していた処理を、削除するか、[[ポーティング移行>移行・マイグレーション#ue626a7c]]する。
-Windows
-net11 - net47 - netXX
-Microsoft.VisualBasic
-上記以外のNuGetパッケージ
*パッケージ・マネージャ [#w4347dc8]
**NuGet [#f51240e8]
***引き続き使用できる。 [#p7a93db3]
-[[.NET Standard]]、[[.NET Core]]でも、引き続きNuGetを使用できる。
-1つのNuGetパッケージには、.NET Framework以外に、~
[[.NET Standard]]、[[.NET Core]]のライブラリを同梱してパッケージ化できる。
***Dependencies [#ya618486]
[[.NET Standard]]、[[.NET Core]]開発に活用できるNuGetライブラリは、~
[[.NET Standard]]、[[.NET Core]] 側にだけ、Dependencies を持つ。
※ しかし、実際には、Dependenciesが正確に書かれていないケースも多く、~
(「target="lib\netXXX」毎にDependenciesが異なるので当然と言えば当然)~
実際にインストールして[[.NET Standard]]に対応しているかどうかを判断する。
*System系ライブラリ [#s76bf31b]
** [[*.config>.NET Core config]] [#n8baa2a2]
**ADO.NET [#n6543893]
***型付きDataSet [#o6c225b0]
-(今の所、)型付きDataSetがない。
-参考
--Port xsd.exe to .NET Core · Issue #8647 · dotnet/corefx~
https://github.com/dotnet/corefx/issues/8647
***DatasetExtensions [#i9e17b1b]
LINQ to DataSetを使用できない。
-参考
--Port DatasetExtensions to .NET Core · Issue #19771 · dotnet/corefx~
https://github.com/dotnet/corefx/issues/19771
*その他ライブラリ [#sec5fcfd]
**log4net [#ga11dd74]
-一部、インターフェイスの変更があるもよう。
-引数にRepositoryが必要になったようだが、~
Microsoft.Extensions.Logging.ILoggerProviderの規則などには関係が無い模様。
***参考 [#y7d8880d]
-How to use Log4Net with ASP.NET Core for logging | dotnetthoughts~
https://dotnetthoughts.net/how-to-use-log4net-with-aspnetcore-for-logging/
-Essential .NET - .NET Core によるログ記録~
https://msdn.microsoft.com/ja-jp/magazine/mt694089.aspx
**その他 [#x3627e74]
-DotNetZip ---> ・・・
-System.Net.Mail ---> MailKit
-System.Drawing ---> ImageProcessor
*[[ASP.NET Core]]系ライブラリ [#odebd8c3]
-対応するライブラリが「Microsoft.AspNetCore.XXXX」にある可能性がある。
-これらのライブラリは[[ASP.NET Core]]ではなく、[[.NET Standard]]前提になる。~
https://www.nuget.org/packages/Microsoft.AspNetCore.All
**System.Web [#i5893ae7]
対応するライブラリが「Microsoft.AspNetCore.XXXX」にある可能性がある。
***RootPath [#paa63f57]
|#|内容|net|netcore, netstandard|h
|1|現在のアプリケーションのルート仮想パス(「/」や「/アプリ名」のような)。|HttpContext.Current.Request.ApplicationPath|HttpContext.Request.PathBase|
|2|サーバー アプリケーションのルート ディレクトリの物理ファイル システム パス|HttpRequest.PhysicalApplicationPath|IApplicationEnvironment.ApplicationBasePath|
-参考
--[[Webサイトのパスを取得する方法]]
--asp.net core - Access IApplicationEnvironment.ApplicationBasePath - Stack Overflow~
https://stackoverflow.com/questions/37298402/access-iapplicationenvironment-applicationbasepath
--Getting the Web Root Path and the Content Root Path in ASP.NET Core | Marius Schulz~
https://blog.mariusschulz.com/2016/05/22/getting-the-web-root-path-and-the-content-root-path-in-asp-net-core
***HttpContext [#yfe521c8]
-c# - How to get HttpContext.Current in ASP.NET Core? - Stack Overflow~
https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core
-Accessing HttpContext outside of framework components in ASP.NET Core | StrathWeb. A free flowing web tech monologue.~
https://www.strathweb.com/2016/12/accessing-httpcontext-outside-of-framework-components-in-asp-net-core/
※ 上記の「Mimicking HttpContext.Current」で[[.NET Standard]]なライブラリ化も可能。
***[[Session>ASP.NET CoreのSession利用方法#x840cdc7]] [#bea9cfcb]
※ [[HttpContext>#yfe521c8]]経由でアクセスする。
***Cookie [#vcd28b71]
-ASP.NET Core Working With Cookie~
https://www.c-sharpcorner.com/article/asp-net-core-working-with-cookie/
-ASP.NET Core 2.0 MVC で Cookie を利用する - Qiita~
https://qiita.com/code0327/items/26c09c83103083ae57b7
***その他 [#q5729d43]
-System.Web.Routing.RouteTable ---> Microsoft.AspNetCore.Routing.RouteTable
-・・・
**Microsoft.Owin [#gce2c3f9]
対応するライブラリが「Microsoft.AspNetCore.XXXX」にある可能性がある。
***Base64Url [#b4a7094a]
-[[Microsoft.AspNetCore.WebUtilities>https://docs.microsoft.com/en-us/dotnet/api/index?view=aspnetcore-2.0&term=Microsoft.AspNetCore.WebUtilities]]
*[[ASP.NET Core]]系ミドルウェア [#cdb7c1c5]
**Filters [#fdf91fc4]
Microsoft.AspNetCore.Mvc.Filters
***Filterクラス [#m32862a5]
-Filterパイプラインが再実装されて、分かりやすくシンプルになった。
-ASP.NET MVC 5 と同じように扱える抽象クラスが Core MVC でも用意されている。~
(ActionFilterAttribute, ResultFilterAttribute, ExceptionFilterAttribute)
-Resource Filterにより、キャッシュなどパフォーマンスの改善の実装が容易に。
-ただし、一部にインターフェイスの変更はある(フィルタ・メソッド、属性の引数)
-また、下記が追加された。
--非同期版のメソッドの追加。
--属性だけでなくDIとの連携した適用が可能になった。
***参考 [#g5a11005]
-Filters
--フィルター | Microsoft Docs~
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/controllers/filters
--ASP.NET Core MVC で大きく変わったフィルタについて調べた - しばやん雑記~
http://blog.shibayan.jp/entry/20160727/1469596437
--アクションフィルタ - コントローラ詳細 - ASP.NET Core ClockUpTips~
http://aspnet-core.clock-up.jp/contents/controller/action-filter
**MVC [#w703d092]
Microsoft.AspNetCore.Mvc
***Controllerクラス [#b59d2213]
-[[上記のFiltersの影響>#fdf91fc4]]により、一部のメソッドにインターフェイスの変更がある。
**WebAPI [#kde6f3a7]
***Controllerクラス [#t3d533d0]
-ベースクラスが、[[MVC>#w703d092]]の[[Controller>#b59d2213]]と統合された。
-[[上記のFiltersの影響>#fdf91fc4]]により、一部のメソッドにインターフェイスの変更がある。
***Filter、FilterAttributeクラス [#u3864545]
-ASP.NET Core - 実際の ASP.NET Core MVC フィルター~
https://msdn.microsoft.com/ja-jp/magazine/mt767699.aspx
-Azure ServiceFabric - Asp.Net WebApiをCore化した時のメモ - Qiita~
https://qiita.com/Yossan/items/e2beb926c0bab31912be
*参考 [#p59f57c7]
**移行元 [#n17481e6]
https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/C%23/Frameworks/Infrastructure
[[.NET Standard]]は、[[.NET Core]]のサブセットなので、≒[[.NET Core]]。~
なので、以下のリンクは、[[.NET Coreへの移行]]の情報を含む。
**移行先 [#e3670d04]
https://github.com/OpenTouryoProject/SampleProgram/tree/netstandard/PrototypeModel/NETStandard
**内部リンク [#e572057e]
***[[.NET Coreへの移行]] [#xd12992f]
***[[ASP.NET Coreへの移行]] [#ob21c056]
***[[.NET Standardバージョンアップ>.NET Coreバージョンアップ#zfa0cd01]] [#m437b56e]
***[[マネージドコードとアンマネージドコードのブリッジ]] [#f3ac66a2]
**microsoft.com [#icd8ac95]
***Microsoft Docs [#ncb5387c]
-.NET Framework から .NET Core への移植~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/
--プロジェクトを整理し、.NET Framework と .NET Core をサポートする~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/project-structure
--.NET Core への移植 - サードパーティの依存関係を分析する~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/third-party-deps
--.NET Core への移植 - ライブラリ~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/libraries
--.NET Core に移植する - Windows 互換機能パックの使用~
https://docs.microsoft.com/ja-jp/dotnet/core/porting/windows-compat-pack
***MSDN magazine > Essential .NET [#y1a2850c]
-.NET Core における構成~
https://msdn.microsoft.com/ja-jp/magazine/mt632279.aspx
-.NET Core によるログ記録~
https://msdn.microsoft.com/ja-jp/magazine/mt694089.aspx
-.NET Core による依存関係の挿入~
https://msdn.microsoft.com/ja-jp/magazine/mt707534.aspx
-Visual Studio 2015 と .NET Core ツール~
https://msdn.microsoft.com/magazine/mt736459
-.NET Core 1.0 によるコマンドライン処理~
https://msdn.microsoft.com/magazine/mt763239
***.NET API Browser [#j6b71fa5]
https://docs.microsoft.com/en-us/dotnet/api/index
-.NET Standard API Reference~
https://docs.microsoft.com/en-us/dotnet/api/index?view=netstandard-2.0
----
Tags: [[:.NET開発]], [[:.NET Core]], [[:.NET Standard]], [[:移行]]