.NET開発者にとって非常に身近なテスト実行プラットフォームであるVSTestにおいて、長年採用されてきたライブラリ構成に大きな変更が加えられることとなりました。
2026年4月29日、Microsoftは.NET 11 Preview 4およびVisual Studio 18.8より、VSTestがNewtonsoft.Jsonへの依存を解消することを発表しました。
この変更は、主にセキュリティの向上と.NET SDKの近代化を目的としています。
多くのプロジェクトにおいては特別な対応は不要ですが、一部の構成ではビルドエラーや実行時エラーが発生する可能性があります。
本記事では、この変更の背景から具体的な影響、そして問題が発生した際の修正方法について詳しく解説します。
変更の背景と目的
これまで、dotnet testやVisual Studioのテストエクスプローラーを支えるVSTestプラットフォームは、内部的なシリアライズ処理にNewtonsoft.Jsonを利用してきました。
しかし、今回のアップデートを機に、.NET環境ではSystem.Text.Jsonへ、.NET Framework環境では軽量なJSONiteへと移行します。
この決定の最大の理由はセキュリティとメンテナンス性の向上にあります。
NuGet.orgにおいて、バージョン13.0.0未満のNewtonsoft.Jsonには脆弱性が報告されており、.NET SDK全体としてこれらの依存関係を排除する動きが進んでいます。
VSTest自体がこのライブラリを必要としなくなったことで、将来的なセキュリティリスクを最小限に抑える狙いがあります。
変更されない要素と互換性の維持
内部的なライブラリの入れ替えが行われますが、VSTestの通信フォーマット自体に変更はありません。
そのため、以下の要素については従来通りの動作が保証されています。
- 通信プロトコルの互換性:メッセージのシリアライズ結果は、どのライブラリを使用しても同一です。
- 新旧プラットフォームの混在:新しいプラットフォームで古いtesthostを動作させることや、その逆も引き続き可能です。
- パフォーマンス:シリアライズのパフォーマンスは、従来と同等か、それ以上の向上が期待されています。
影響を受ける可能性があるプロジェクト
大部分のテストプロジェクトはこの変更の影響を受けませんが、以下に該当する場合は注意が必要です。
- プロジェクト内で
Newtonsoft.Jsonを使用しているが、パッケージ参照(PackageReference)を明示的に記述していない場合。 Newtonsoft.Jsonを参照しているものの、ExcludeAssets="runtime"を指定してVSTest側のランタイム資産に依存している場合。- 独自のテストアダプターやデータコレクターを作成しており、依存関係を宣言せずに
Newtonsoft.Jsonを利用している場合。
逆に、xUnitやNUnitを.NET上で利用しているプロジェクトや、既に明示的に最新バージョンのNewtonsoft.Jsonを参照しているプロジェクトについては、特に対処の必要はありません。
具体的なエラー内容と修正方法
依存関係の解消によって問題が発生した場合、エラーメッセージは明確に表示されます。
それぞれのケースに応じた修正方法を確認しましょう。
ビルドエラー:参照の欠落
テストプロジェクト内でJObjectやJsonConvertなどの型を使用しているにもかかわらず、プロジェクトファイルでパッケージを参照していない場合、ビルドエラーが発生します。
これは、これまでVSTestを経由して「漏れ出していた」参照が利用できなくなるためです。
この場合は、以下のようにパッケージ参照を明示的に追加することで解決します。
<!-- プロジェクトファイル(.csproj)に手動で追加するか、NuGetマネージャーでインストールします -->
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
実行時エラー:FileNotFoundException
パッケージを参照していても、ランタイム資産を除外している設定(ExcludeAssets="runtime")を行っているプロジェクトでは、テスト実行時にファイルが見つからないという例外が発生します。
System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'.
この問題の解決策は、ExcludeAssetsの設定を削除するか、ランタイム資産を含めるように構成を変更することです。
テストアダプターや拡張機能でのエラー
自作のテストアダプターなどがNewtonsoft.Jsonに依存している場合、ロード時にエラーが発生することがあります。
拡張機能の開発者は、自身のパッケージ内にNewtonsoft.Jsonを含めるか、System.Text.Jsonへの移行を検討する必要があります。
また、VSTestの公開APIの一部(通信API)からNewtonsoft.Json.Linq.JTokenが削除されます。
プロトコルレベルでカスタマイズを行っている開発者は、この破壊的変更に注意してください。
リリーススケジュール
この変更が含まれるツールのリリース予定日は以下の通りです。
| リリース対象 | 公開予定日 |
|---|---|
| .NET 11 Preview 4 | 2026年5月12日 |
| Visual Studio 18.8 Insiders 1 | 2026年6月9日 |
早期に動作確認を行いたい場合は、NuGetにて公開されているMicrosoft.TestPlatform.*のプレビュー版(バージョン 1.0.0-alpha-stj以降)を試用することが可能です。
まとめ
今回のVSTestにおけるNewtonsoft.Jsonの依存関係解消は、.NETエコシステム全体の安全性を高めるための重要なステップです。
これまでVSTestが内部で保持していたライブラリに「隠れて」依存していたプロジェクトにとっては、明示的なパッケージ参照の追加という作業が発生しますが、修正自体は非常にシンプルです。
2026年5月以降のアップデートをスムーズに行うためにも、現在のテストプロジェクトの依存関係を一度見直し、必要であれば明示的なパッケージ参照を追加しておくことをお勧めします。
特に大規模なソリューションでは、共通のビルド定義で一括して参照を管理するなどの対策が有効でしょう。
