「[[マイクロソフト系技術情報 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] ***[[移行先>.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]] -依存していた処理を削除するか[[ポーティング移行>#k31bea09]]する。 --Windows --net11 - net47 - netXX --Microsoft.VisualBasic --上記以外のNuGetパッケージ ***必要に応じて、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のクロスプラットフォーム対応#c59bc8d4]]」で追加したNuGetパッケージ。 --Public <PackageReference Include="log4net" Version="2.0.8" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.1" /> <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.1" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="11.0.2" /> <PackageReference Include="System.Data.Odbc" Version="4.5.0-preview1-26216-02" /> <PackageReference Include="System.Data.SqlClient" Version="4.4.3" /> ---DamPstGrS <PackageReference Include="Npgsql" Version="3.2.7" /> ---DamMySQL <PackageReference Include="MySql.Data" Version="6.10.6" /> --Framework <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.0.2" /> <PackageReference Include="Microsoft.AspNetCore.Http.Extensions" Version="2.0.2" /> <PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.2" /> <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.0.2" /> <PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" /> ***必要に応じて、[[ポーティング移行>移行・マイグレーション#ue626a7c]]する。 [#k31bea09] 以下は、下記の「[[移行元 / 移行先>.NETのクロスプラットフォーム対応#c59bc8d4]]」でポーティング移行した処理。 -Public~ あとでDiff分析してまとめる。 -Framework~ あとでDiff分析してまとめる。 *パッケージ・マネージャ [#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 *[[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」にある可能性がある。 ***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 ***RootPath [#paa63f57] -HttpContext.Current.Request.ApplicationPath -・・・ -参考 --asp.net core - Access IApplicationEnvironment.ApplicationBasePath - Stack Overflow~ https://stackoverflow.com/questions/37298402/access-iapplicationenvironment-applicationbasepath **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]] *その他ライブラリ [#sec5fcfd] **log4net [#ga11dd74] -一部、インターフェイスの変更があるもよう。 -引数にRepositoryが必要になったようだが、~ Microsoft.Extensions.Logging.ILoggerProviderの規則などには関係が無い模様。 -参考 --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 *サマリ [#o043b2e7] 既存ライブラリは、以下のような方針で移行できると考える(あくまで一例)。 -OpenTouryoProject/OpenTouryo > Issue #235~ > Migrate to .NET Standard. > Result of verification~ https://github.com/OpenTouryoProject/OpenTouryo/issues/235#issuecomment-377419287 *参考 [#p59f57c7] [[.NET Standard]]は、[[.NET Core]]のサブセットなので、≒[[.NET Core]]。~ なので、以下のリンクは、[[.NET Coreへの移行]]の情報を含む。 **移行情報 [#p6d53d28] -.NET Core 2.1のロードマップが公開されたようです - つばろぐ~ http://tsubalog.hatenablog.com/entry/net-core-2-1-roadmap ***[[.NET Coreへの移行]] [#xd12992f] ***[[ASP.NET Coreへの移行]] [#ob21c056] ***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 [#j377c636] https://docs.microsoft.com/en-us/dotnet/api/index?view=netstandard-2.0 ---- Tags: [[:.NET開発]], [[:.NET Core]], [[:.NET Standard]], [[:移行]]