- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-戻る
--[[.NET Standard]]
--[[移行・マイグレーション]]
---[[.NETのクロスプラットフォーム対応]]
* 目次 [#o5a016dc]
#contents
*概要 [#r7faebbc]
下記の「[[移行元 / 移行先>#c59bc8d4]]」の、「[[.NET Standard]]」移行ノウハウをサマリする。~
※ 対象は、[[.NET Standard]] 2.0。
-下記の「[[移行元 / 移行先>#c59bc8d4]]」の、「[[.NET Standard]]」移行ノウハウをサマリする。~
-[[コチラ>.NET Standard#ie8e5050]]に書いた通り、PCLと比べて移行はし易い感じ。
*詳細 [#u9084419]
**準備 [#k7f8bf18]
***[[移行先>#e3670d04]]プロジェクトを準備する。 [#o36ad6ee]
不要なファイルを削除する(SourceファイルとProjectファイルのみ残す)。
不要なファイルを削除する。
-packages.config
-Properties\AssemblyInfo.cs
***Projectファイルを準備する。 [#e8f374c4]
-以下のようなProjectファイルを準備する。~
(既存のProjectファイルの中身を以下で置き換えればイイ)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
-.NET Standardでは、配下のSourceファイルが自動で追加される。~
-[[.NET Standard]]では、配下のSourceファイルが自動で追加される。~
必要に応じて、ファイルやフォルダの除外設定を行う。~
※ netstandardやnetcoreでは、除外されるファイルやフォルダだけがProjectファイルに明記される。
***ProjectをVisual Studioから開く。 [#w8f1924b]
Projectファイルをダブルクリックするか、空のソリューションに追加する。
***Projectの初期設定を行う。 [#tb3a8fcc]
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>OpenTouryoStd.Public</AssemblyName>
<RootNamespace>Touryo.Infrastructure.Public</RootNamespace>
<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パッケージにnetstandardが含まれるかどうかを確認する。~
([[パッケージを解凍して、中を直接確認>NuGetパッケージの開発と公開#p66307ac]]してもイイ)
-以下のライブラリの移行先をNuGetパッケージから探す。
--[[System系ライブラリ>#s76bf31b]]
---[[System.Configuration.ConfigurationManager>.NET Coreへの移行#n8baa2a2]]
---[[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
-以下は、下記の「[[移行元 / 移行先>#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.Configuration.ConfigurationManager" Version="4.4.1" />
<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" />
--Business~
-
***必要に応じて、[[ポーティング移行>移行・マイグレーション#ue626a7c]]する。 [#k31bea09]
以下は、下記の「[[移行元 / 移行先>#c59bc8d4]]」でポーティング移行した処理。
-Public~
あとでDiff分析してまとめる。
-Framework~
あとでDiff分析してまとめる。
-Business~
あとで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パッケージがあるが使えない(詳細不明)。
-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]
**移行元 / 移行先 [#c59bc8d4]
***移行元 [#n17481e6]
-試行~
https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20/root/programs/C%23/Frameworks/Infrastructure
-実施~
https://github.com/OpenTouryoProject/OpenTouryo/tree/02-20
***移行先 [#e3670d04]
-試行~
https://github.com/OpenTouryoProject/SampleProgram/tree/netstandard/PrototypeModel/NETStandard
-実施~
https://github.com/OpenTouryoProject/OpenTouryo/tree/netstandard
**移行情報 [#p6d53d28]
***[[.NET Coreへの移行]] [#xd12992f]
***[[ASP.NET Coreへの移行]] [#ob21c056]
**MSDN magazine [#e1bd7d57]
***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]], [[:移行]]