5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VisualStudio無しで.NET Framework→.NET 10移行を試したら、ツールそのものが世代交代していた話

5
Last updated at Posted at 2026-08-11

はじめに

C# で出来ること一覧 2026年版(.NET 10) という記事を読んで、後半で紹介されていた「.NET Frameworkから.NETへの移行」を実際に手を動かして試してみることにしました。

自分は過去にVB6→C#移行の案件に関わったこともあり、この手の移行話には割と反応してしまいます。ただし今回は縛りが一つあって、Visual Studioを入れていない環境(WSL2 + DevContainer + VS Code派)でどこまでできるか、というのを試してみました。

結論から言うと、最後は「移行ツールそのものが2026年に入って非推奨になっていた」という、狙って書けないオチにたどり着きました。

使ったサンプル

Microsoft公式が移行チュートリアル用に公開している、WinFormsのサンプルアプリ「Matching Game」を使いました。タイルをめくって同じ絵柄を揃える、いわゆる神経衰弱です。MatchingGame(UI)とMatchingGame.Logic(ロジック)の2プロジェクト構成で、UIにはMetroFrameworkというモダン風の見た目にするNuGetパッケージが使われています。

git clone --depth 1 https://github.com/dotnet/samples.git dotnet-samples-tmp

upgrades\matching-game-netframework\winforms 以下がお目当てのフォルダです。

VS無しでビルド環境を整える

.NET Frameworkプロジェクトをビルドするには、対応するMSBuildが必要です。フルのVisual Studio IDEは入れたくなかったので、コマンドラインだけの軽量版「Build Tools for Visual Studio」を使いました。

winget install --id Microsoft.VisualStudio.2022.BuildTools --override "--add Microsoft.VisualStudio.Workload.MSBuildTools;includeRecommended --add Microsoft.Net.Component.4.8.SDK --add Microsoft.Net.Component.4.8.TargetingPack --quiet"

これでIDE無しでもmsbuildコマンドが使える状態になります(ただし後述の通り、思わぬところで足を引っ張ることになりました)。

つまずきポイント①:対象バージョンの参照アセンブリが無い

早速ビルドしてみると、こんなエラーが出ました。

error MSB3644: .NETFramework,Version=v4.5.2 の参照アセンブリが見つかりませんでした。

サンプルは.NET Framework 4.5.2をターゲットにしていましたが、こちらが入れたTargeting Packは4.8のみ。実は公式の移行手順でも「まず.NET Framework 4.7.2以降にretargetする」のが最初のステップとして案内されています。今回は素直に4.8へ上げることにしました。

.csproj内の該当行を書き換えます。

<!-- Before -->
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>

<!-- After -->
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>

MatchingGame.csprojMatchingGame.Logic.csprojの両方を直したところ、MatchingGame.Logicはビルドが通りました。

つまずきポイント②:packages.config形式のパッケージが復元できない

MatchingGame本体の方は別のエラーで止まりました。

error CS0246: 型または名前空間の名前 'MetroFramework' が見つかりませんでした

このプロジェクトはpackages.configという古い形式でNuGet参照を管理していました。今どきのmsbuild /t:restoreはPackageReference形式向けのコマンドなので、packages.config形式には効きません。nuget.exe本体で復元する必要がありました。

Invoke-WebRequest -Uri "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "nuget.exe"
.\nuget.exe restore MatchingGame.sln

これでようやくビルドが通り、実際にアプリも起動できました。地味に懐かしい神経衰弱で、MetroFrameworkのフラットなUIが確認できました。

つまずきポイント③:.NET Upgrade Assistantがクラッシュする

ここからが本題の移行作業です。.NET Upgrade AssistantというCLIツールをインストールして、分析(analyze)を試しました。

dotnet tool install -g upgrade-assistant
upgrade-assistant analyze MatchingGame.sln

対話式のウィザードでターゲットフレームワーク(.NET 10.0)やレポート形式などを選んでいき、いざ実行すると以下の例外で落ちました。

Microsoft.CodeAnalysis.MSBuild.RemoteInvocationException: An exception of type
System.TypeLoadException was thrown: アセンブリ 'Microsoft.Build, Version=15.1.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' からの型
'Microsoft.Build.Experimental.ProjectCache.ProjectCacheService' にあるメソッド 'DisposeAsync'
に実装が含まれていません。

ツールを最新化(dotnet tool uninstallinstallし直し)しても症状は変わらず、バージョンは1.0.518.26217のままでした。

ここで調べてみたところ、原因が判明しました。

.NET Upgrade Assistant は2026年に入って正式に非推奨(deprecated)になっていました。 後継となるのが「GitHub Copilotアップグレード(GitHub Copilot upgrade for .NET)」です。Copilot Chat上で@upgradeエージェントとして呼び出す形で、.NETのバージョンアップや、.NET Frameworkからの移行を支援してくれます。

つまり、今回のTypeLoadExceptionはこちらの設定ミスではなく、開発の止まったツールと、新しめのBuild Tools環境(MSBuild 17.14系)との組み合わせで起きた互換性問題だった可能性が高いです。奇しくも自分が用意したビルド環境自体が、このツールにとっては「新しすぎた」わけです。

GitHub Copilotアップグレードは、Visual StudioだけでなくVisual Studio Code拡張機能としてもインストールできます。自分は最初「Visual Studio専用の機能だろう」と思い込んでいたのですが、これは誤りでした。普段使っているVS Code環境でも、Visual Studioを別途入れなくてもそのまま続きが試せそうです。

わかったこと

  • .NET Framework → .NET 10への移行は、VS無し・CLIだけでもある程度は進められる(ビルド環境の構築、retarget、パッケージ復元まで)
  • ただしpackages.config形式のプロジェクトはnuget.exeが別途必要になるなど、地味な足かせがいくつかある
  • CLI版の.NET Upgrade Assistantは2026年時点で非推奨。これから移行を試すなら、公式が推しているのは「GitHub Copilotアップグレード」の方(Visual StudioだけでなくVS Code拡張機能としても利用可能)
  • 逆に言うと、VSを使わない縛りだと今の公式ツールチェーンにはうまく乗れないポイントがある、というのも実際に触ってみて初めてわかったこと

次回予告

GitHub Copilotアップグレードの方は、VS Code拡張機能版でそのまま続きを試す予定です。Visual Studio自体は不要そうなので、そちらは別記事にまとめます。

先に、記事後半で紹介されていたもう一つのテーマ「Microsoft Agent Framework / Microsoft.Extensions.AI」を触ってみようと思います。


追記(2026-08-11): 記事公開後にコメントで、.NET Framework移行に使える「GitHub Copilotアップグレード」というツールと、それがVisual Studio Code拡張機能としてもインストールできる点をご指摘いただきました。本文を修正済みです。ご指摘ありがとうございました。

5
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?