「[[マイクロソフト系技術情報 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]]」移行ノウハウをサマリする。~

*詳細 [#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ファイルが自動で追加される。~
必要に応じて、ファイルやフォルダの除外設定を行う。~
※ 除外されるファイルやフォルダだけがProjectファイルに明記される。

***ProjectをVisual Studioから開く。 [#w8f1924b]
Projectファイルをダブルクリックするか、空のソリューションに追加する。

***Projectの初期設定を行う。 [#tb3a8fcc]
 <PropertyGroup>
   <TargetFramework>netstandard2.0</TargetFramework>
   <AssemblyName>OpenTouryoStd.Public</AssemblyName>
   <RootNamespace>Touryo.Infrastructure.Public</RootNamespace>
 </PropertyGroup>

**[[ポーティング移行>移行・マイグレーション#ue626a7c]] [#d3087e43]

***移行対象ファイルを選別する。 [#j19db7af]
-コンパイル・エラーをチェックしながら移行対象ファイルを選別する。

-[[必要に応じて、NuGetパッケージを追加する。>#b63d5929]]

-依存していた処理を削除するか[[ポーティング移行>#k31bea09]]する。

--Windows
--net11-net47
--VisualBasic
--上記以外のNuGetパッケージ

***必要に応じて、NuGetパッケージを追加する。 [#b63d5929]
-参照が無くが発生したら、NuGetパッケージを確認しインストール。~
これにより、NuGetパッケージにnetstandardが含まれるかどうか確認できる。

-以下のようなライブラリを探す。
--System系
---System.Configuration.ConfigurationManager
-以下のライブラリの移行先をNuGetパッケージから探す。
--[[System系ライブラリ>#s76bf31b]]
---[[System.Configuration.ConfigurationManager>.NET Coreへの移行#n8baa2a2]]

--System.Data系~
--System.Data系ライブラリ~
[[ADO.NETデータプロバイダ]]
---System.Data.SqlClient
---System.Data.Odbc
---Npgsql
---MySql.Data

--[[ASP.NET Core>#odebd8c3]]系~
--[[ASP.NET Core系ライブラリ>#odebd8c3]]~
※ ココが比較的、大変。
---[[System.Web>#i5893ae7]]
---[[Microsoft.Owin>#gce2c3f9]]

--その他
--[[その他ライブラリ>#sec5fcfd]]
---log4net
---Json.NET

-以下は、下記の「[[移行元 / 移行先>#c59bc8d4]]」で追加したNuGetパッケージ。

--Public
    <PackageReference Include="log4net" Version="2.0.8" />
    <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分析してまとめる。

*System系ライブラリ [#s76bf31b]

** *.config [#n8baa2a2]
***System.Configuration.ConfigurationManager [#qcd853ca]
NuGetパッケージがあるが使えない(詳細不明)。

***Microsoft.Extensions.Configuration [#lc101ede]
以下の情報を元にマイグレーションする必要がある。

-参考
--ASP.NET Core の構成 | Microsoft Docs~
https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/index
--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~
&gt; 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

***移行先 [#e3670d04]
https://github.com/OpenTouryoProject/SampleProgram/tree/netstandard/PrototypeModel/NETStandard

**[[ASP.NET Core]] [#odebd8c3]
-対応するライブラリが「Microsoft.AspNetCore.XXXX」にある可能性がある。
-これらのライブラリは[[ASP.NET Core]]ではなく、[[.NET Standard]]前提になる。~
https://www.nuget.org/packages/Microsoft.AspNetCore.All

***[[System.Web>ASP.NET Coreへの移行#i5893ae7]] [#i5893ae7]

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

**移行情報 [#p6d53d28]
***[[.NET Coreへの移行]] [#xd12992f]
***[[ASP.NET Coreへの移行]] [#ob21c056]

**.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]], [[:移行]]


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