-
Notifications
You must be signed in to change notification settings - Fork 0
MS_MigrationToDotNetCore
- 戻る(移行・マイグレーション > 各種、技術毎の移行性 > .NETのクロスプラットフォーム対応、.NET Core)
- .NET Coreへの移行
- .NET 5への移行
- .NET Standardへの移行
- ASP.NET Coreへの移行
※ 対象は、.NET Core 2.0。
- 下記の「移行元 / 移行先」(.NETのクロスプラットフォーム対応)の、
「.NET Core」移行ノウハウをサマリする。 - 「.NET Standardへの移行」とホボ ≒ だった。
補足(.NET Standard との使い分け): 「ホボ ≒」と書かれているとおり
作業は似ているが、成果物の性質が違う。
netstandard2.0netcoreapp/net8.0種別 ライブラリ専用(実行できない) ライブラリ + 実行可能アプリ .NET Framework から参照 できる できない 使える API 共通部分のみ 全部 実務上は「ライブラリはまず
netstandard2.0、
EXE / Web はnetcoreapp(現在はnet8.0)」という切り分けになる。
移行の順序についてはASP.NET Coreへの移行の
「移行の定石」も参照。
-
不要なファイルを削除する。
*.configProperties\AssemblyInfo.cs
-
必要なファイルを追加する。
-
appsettings.json(.NET Core config)
app.configのappSettingsセクションを JSON 化
-
※ 参考: .NET config
移行メモ(
AssemblyInfo.csを消す理由): SDK スタイルの
プロジェクトでは、AssemblyVersion等の属性が
.csprojの内容からビルド時に自動生成される。
手書きのAssemblyInfo.csを残すと
「属性が重複して定義されています」というコンパイル エラーになる。自動生成を止めたい場合は次を指定する。
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
-
以下のような Project ファイルを準備する。
(既存の Project ファイルの中身を以下で置き換えればイイ)<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> </Project>
-
.NET Coreでは、配下の Source ファイルが自動で追加される。
必要に応じて、ファイルやフォルダの除外設定を行う。
※netstandardやnetcoreでは、
除外されるファイルやフォルダだけが Project ファイルに明記される。
補足(この「置き換える」作業は自動化できる): 手で書き換えなくても、
try-convert(現在は .NET Upgrade Assistant に統合)で
旧形式 → SDK スタイルへ機械的に変換できる。dotnet tool install -g upgrade-assistant upgrade-assistant upgrade <対象.csproj>
packages.config→PackageReferenceの変換も含めて処理されるため、
手作業より確実である。
Project ファイルをダブルクリックするか、空のソリューションに追加する。
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>XXXX</AssemblyName>
<RootNamespace>YYYY</RootNamespace>
</PropertyGroup>- 「.NET Standard」とホボ ≒。
- クラス・メソッドの有/無については、
.NET API Browserを使用すると良い。
「.NET Standard」とホボ ≒。
「.NET Standard」とホボ ≒。
サポートの予定はない模様。
- Port xsd.exe to .NET Core · Issue #8647 · dotnet/corefx
https://github.com/dotnet/corefx/issues/8647
補足(現在も未サポート): 型付き
DataSet(xsd.exe生成)は
.NET Core 以降でもデザイナ・生成ツールが提供されていない。
DataSet/DataTableクラス自体は使えるが、
Visual Studio の「データセット デザイナ」は .NET Framework 専用のままである。移行時の現実的な選択は次の 3 つ。
方針 内容 生成済みコードを持ち込む .Designer.csをそのままnetstandard2.0プロジェクトに移す(動くことが多い)POCO + ORM に置き換える Entity Framework Core / Dapper へ。推奨 .NET Framework に据え置く 移行対象から外す
- Reflection の互換性(.NET の Reflection)
- Serialize の相互運用性(.NET の Serialize)
補足(移行で最も詰まるのはシリアライズ): .NET 5以降、
BinaryFormatterは既定で無効化され、
.NET 9 でアセンブリごと削除された。
旧 新 BinaryFormatter使用不可。 System.Text.Json/ MessagePack / protobuf へSoapFormatter削除済み XmlSerializer利用可(現役) DataContractSerializer利用可 JavaScriptSerializerSystem.Text.Jsonへセッション状態やキャッシュを
BinaryFormatterで永続化している
既存システムは、移行時にデータ形式の変換が必要になる。
見積もりで見落としやすい最大のポイントである。
- .NET Coreへの移植 | ++C++; // 未確認飛行 C ブログ
http://ufcpp.net/blog/2016/2/porting-to-net-core/
- .NET Standardへの移行
- ASP.NET Coreへの移行
- .NET Coreバージョンアップ(
MS_DotNetCoreUpgrade.md) - マネージドコードとアンマネージドコードのブリッジ
-
.NET Framework から .NET への移植 | Microsoft Learn
https://learn.microsoft.com/dotnet/core/porting/ -
.NET Upgrade Assistant
https://learn.microsoft.com/dotnet/core/porting/upgrade-assistant-overview -
.NET API Browser
https://learn.microsoft.com/dotnet/api/
Tags: 移行, .NET開発, .NET Core
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。