Skip to content

MS_MigrationToDotNetCore

nishi_74322014 edited this page Aug 21, 2026 · 2 revisions

.NET Coreへの移行

概要

※ 対象は、.NET Core 2.0。

補足(.NET Standard との使い分け): 「ホボ ≒」と書かれているとおり
作業は似ているが、成果物の性質が違う

netstandard2.0 netcoreapp / net8.0
種別 ライブラリ専用(実行できない) ライブラリ + 実行可能アプリ
.NET Framework から参照 できる できない
使える API 共通部分のみ 全部

実務上は「ライブラリはまず netstandard2.0
EXE / Web は netcoreapp(現在は net8.0
」という切り分けになる。
移行の順序についてはASP.NET Coreへの移行
「移行の定石」も参照。

詳細

準備

移行性評価の実施

.NET Standardへの移行を参照。

移行先プロジェクトを準備する。

  • 不要なファイルを削除する。

    • *.config
    • Properties\AssemblyInfo.cs
  • 必要なファイルを追加する。

    • appsettings.json.NET Core config
      app.configappSettings セクションを JSON 化

※ 参考: .NET config

移行メモ(AssemblyInfo.cs を消す理由): SDK スタイルの
プロジェクトでは、AssemblyVersion 等の属性が
.csproj の内容からビルド時に自動生成される
手書きの AssemblyInfo.cs を残すと
「属性が重複して定義されています」というコンパイル エラーになる。

自動生成を止めたい場合は次を指定する。

<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

Projectファイルを準備する。

  • 以下のような Project ファイルを準備する。
    (既存の Project ファイルの中身を以下で置き換えればイイ)

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
      </PropertyGroup>
    </Project>
  • .NET Coreでは、配下の Source ファイルが自動で追加される。
    必要に応じて、ファイルやフォルダの除外設定を行う。
    netstandardnetcore では、
    除外されるファイルやフォルダだけが Project ファイルに明記される。

補足(この「置き換える」作業は自動化できる): 手で書き換えなくても、
try-convert(現在は .NET Upgrade Assistant に統合)で
旧形式 → SDK スタイルへ機械的に変換できる。

dotnet tool install -g upgrade-assistant
upgrade-assistant upgrade <対象.csproj>

packages.configPackageReference の変換も含めて処理されるため、
手作業より確実である。

ProjectをVisual Studioから開く。

Project ファイルをダブルクリックするか、空のソリューションに追加する。

Projectの初期設定を行う。

<PropertyGroup>
  <TargetFramework>netstandard2.0</TargetFramework>
  <AssemblyName>XXXX</AssemblyName>
  <RootNamespace>YYYY</RootNamespace>
</PropertyGroup>

ポーティング移行

移行対象ファイルを選別する。

必要に応じて、NuGetパッケージを追加する。

.NET Standard」とホボ ≒。

必要に応じて、ポーティング移行する。

.NET Standard」とホボ ≒。

その他

NuGet

.NET Standardへの移行を参照。

型付データセット

サポートの予定はない模様。

補足(現在も未サポート): 型付き DataSetxsd.exe 生成)は
.NET Core 以降でもデザイナ・生成ツールが提供されていない

DataSet / DataTable クラス自体は使えるが、
Visual Studio の「データセット デザイナ」は .NET Framework 専用のままである。

移行時の現実的な選択は次の 3 つ。

方針 内容
生成済みコードを持ち込む .Designer.cs をそのまま netstandard2.0 プロジェクトに移す(動くことが多い)
POCO + ORM に置き換える Entity Framework Core / Dapper へ。推奨
.NET Framework に据え置く 移行対象から外す

互換性、相互運用性

補足(移行で最も詰まるのはシリアライズ): .NET 5以降、
BinaryFormatter は既定で無効化され、
.NET 9 でアセンブリごと削除された。

BinaryFormatter 使用不可System.Text.Json / MessagePack / protobuf へ
SoapFormatter 削除済み
XmlSerializer 利用可(現役)
DataContractSerializer 利用可
JavaScriptSerializer System.Text.Json

セッション状態やキャッシュを BinaryFormatter で永続化している
既存システムは、移行時にデータ形式の変換が必要になる。
見積もりで見落としやすい最大のポイントである。

参考

内部リンク

microsoft.com


Tags: 移行, .NET開発, .NET Core

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally