「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[.NET Standard]] --[[移行・マイグレーション]] ---[[.NETのクロスプラットフォーム対応]] * 目次 [#o5a016dc] #contents *概要 [#r7faebbc] ※ 対象は、[[.NET Standard]] 2.0。 -下記の「[[移行元 / 移行先>.NETのクロスプラットフォーム対応#c59bc8d4]]」の、「[[.NET Standard]]」移行ノウハウをサマリする。~ -[[コチラ>.NET Standard#ie8e5050]]に書いた通り、PCLと比べて移行はし易い感じ。 *詳細 [#u9084419] **準備 [#k7f8bf18] ***[[移行プロセスの確認>#ncb5387c]] [#v4769a8c] ***移行性評価の実施 [#z0edc7c9] 必要に応じて、以下ツールを使用し移行性を評価する。 -.NET Portability Analyzer --.NET Portability Analyzer - .NET | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/standard/analyzers/portability-analyzer --Portability Analyzerを使ってライブラリの.NET Standard準拠を調べよう - ryuichi111stdの技術日記~ http://ryuichi111std.hatenablog.com/entry/2017/03/07/142248 -.NET Compatibility Diagnostic Tools --NuGet Gallery | Microsoft.DotNet.FrameworkCompatibilityDiagnostics 0.5.0~ https://www.nuget.org/packages/Microsoft.DotNet.FrameworkCompatibilityDiagnostics/ --.NET Framework の互換性の診断 – Visual Studio 日本チーム Blog~ https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/03/02/net-framework/ --.NET API アナライザー | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/standard/analyzers/api-analyzer --.NET Coreへの移植 | ++C++; // 未確認飛行 C ブログ~ http://ufcpp.net/blog/2016/2/porting-to-net-core/ ***[[移行先>.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] コンパイル・エラーをチェックしながら移行対象ファイルを選別する。 ***必要に応じて、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 [#n8baa2a2] ***System.Configuration.ConfigurationManager [#qcd853ca] -NuGetパッケージがあるが使えない(詳細不明)。 -なので、現時点では、[[Microsoft.Extensions.Configuration>#lc101ede]]を使用する。 ***Microsoft.Extensions.Configuration [#lc101ede] 以下の情報を元にマイグレーションする必要がある。 -参考 --microsoft.com ---ASP.NET Core の構成 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/index ---Essential .NET - .NET Core における構成~ https://msdn.microsoft.com/ja-jp/magazine/mt632279.aspx --stackoverflow.com ---ASP.NET Core configuration for .NET Core console application - Stack Overflow~ https://stackoverflow.com/questions/38114761/asp-net-core-configuration-for-net-core-console-application ---c# - How to SetBasePath in ConfigurationBuilder in Core 2.0 - Stack Overflow~ https://stackoverflow.com/questions/46843367/how-to-setbasepath-in-configurationbuilder-in-core-2-0 *その他ライブラリ [#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] -HttpContext.Current.Request.ApplicationPath -・・・ -参考 --asp.net core - Access IApplicationEnvironment.ApplicationBasePath - Stack Overflow~ https://stackoverflow.com/questions/37298402/access-iapplicationenvironment-applicationbasepath ***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 [#bea9cfcb] 文字列しか格納できなくなったので、複雑なオブジェクトはJSONに変換する。 -Using Sessions and HttpContext in ASP.NET 5 and MVC6~ https://benjii.me/2015/07/using-sessions-and-httpcontext-in-aspnet5-and-mvc6/ -ASP.NET Core MVCでSession管理 - 今日もちょいつか~ http://heinlein.hatenablog.com/entry/2017/11/21/141639 ***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 **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] **MVC [#w703d092] -Microsoft.AspNetCore.Mvc **WebAPI [#kde6f3a7] ***Filters [#m32862a5] Microsoft.AspNetCore.Mvc.Filters -Filterパイプラインが再実装されて、分かりやすくシンプルになった。 -ASP.NET MVC 5 と同じように扱える抽象クラスが Core MVC でも用意されている。~ (ActionFilterAttribute, ResultFilterAttribute, ExceptionFilterAttribute) -Resource Filterにより、キャッシュなどパフォーマンスの改善の実装が容易に。 -ただし、一部にインターフェイスの変更はある(フィルタ・メソッド、属性の引数) -また、下記が追加された。 --非同期版のメソッドの追加。 --属性だけでなくDIとの連携した適用が可能になった。 ***参考 [#g5a11005] -Azure ServiceFabric - Asp.Net WebApiをCore化した時のメモ - Qiita~ https://qiita.com/Yossan/items/e2beb926c0bab31912be -Filters --フィルター | Microsoft Docs~ https://docs.microsoft.com/ja-jp/aspnet/core/mvc/controllers/filters --ASP.NET Core - 実際の ASP.NET Core MVC フィルター~ https://msdn.microsoft.com/ja-jp/magazine/mt767699.aspx --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 *参考 [#p59f57c7] [[.NET Standard]]は、[[.NET Core]]のサブセットなので、≒[[.NET Core]]。~ なので、以下のリンクは、[[.NET Coreへの移行]]の情報を含む。 **[[.NET Coreへの移行]] [#xd12992f] **[[ASP.NET Coreへの移行]] [#ob21c056] **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 **その他 [#h7cf5504] -.NET Core 2.1のロードマップが公開されたようです - つばろぐ~ http://tsubalog.hatenablog.com/entry/net-core-2-1-roadmap ---- Tags: [[:.NET開発]], [[:.NET Core]], [[:.NET Standard]], [[:移行]]