NET Core 3.1は長い間使用されてきましたが、マイクロソフトは2022年末までにサポートを提供しなくなり、. NET 6の次のLTSバージョンも2024 年 11 月にサポートを終了するため、. NET 8への直接アップグレードが最良の選択肢です。
微软官方推出了升级工具:Upgrade Assistant 。
アップグレードツールを使用すると、アップグレードは非常に簡単です。この記事では、. NET Core 3.1プロジェクトを. NET 8にアップグレードするために使用します。
アップグレードアシスタントのインストール
VS2022が17.8にアップグレードされたことを確認します。次に、VS2022の拡張機能管理で拡張機能をインストールします。. NET Upgrade Assistant。以前にアップグレードツール拡張機能をインストールした場合は、アンインストールして再インストールする必要があります。

アップグレード·プロジェクト
NET Core 3.1のソリューションでは、多くのプロジェクトがあり、プロジェクトの依存関係に応じて最下位から上位にアップグレードされます。
アップグレードツールをインストールした後、プロジェクトを右クリックするとアップグレードボタンが表示されます。

2)ウィンドウでアップグレード方法を選択します。

3、アップグレードのターゲットバージョンを選択します。ここで私は. NET 8を選択します。これは長期サポートバージョンです。最新バージョンのアップグレードツールは7と8にアップグレードするだけをサポートしています。. NET 6にアップグレードする必要がある場合は、古いバージョンを使用する必要があります:

更新する必要があるコンテンツを選択し、デフォルトですべて選択し、アップグレードするには“アップグレード選択”をクリックします。

アップグレード成功のヒントはすぐに表示されます。

コンパイルする。
私はいくつかの低バージョンのプロジェクトを検証しましたが、ツールを使用してアップグレードプロセスにエラーはありませんでしたが、アップグレード後のコードコンパイルにはさまざまな問題がありました。
質問1:IONIC.zip
元のバージョンでは、プロジェクト内のzip圧縮にIonic.zipを使用していましたが、. NET 8はサポートされなくなり、DotNetZip

問題2:BinaryFormatterは時代遅れです。
コードの多くの部分でバイナリシリアライズが使用されていますが、BinaryFormatterは. NET 8で非推奨になり、2つの方法があります。
ソースコードを変更し、新しい推奨方法で置き換える。
2、プロジェクトファイルを変更し、この問題を無視して、プロジェクトファイルに次の構成を追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
</PropertyGroup>
</Project>
参照先learn.microsoft.com/zh-cn/dotnet/fundamentals/syslib-diagnostics/syslib0011
問題3:Asposeの利用
プロジェクト内のOfficeファイルの処理は、Asposeスイートを使用しており、アップグレード後のバージョンに互換性の問題があり、対応するバージョンにアップグレードするだけです。

問題4:方法論の曖昧性
以前のバージョンでは、Listが複合型を格納している場合、型内の特定のフィールドに応じてリファクタリングすることはできませんでした。
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() { Name="oec2003",Age=18});
list.Add(new UserInfo() { Name = "oec2003" ,Age=18});
list.Add(new UserInfo() { Name = "oec2004" ,Age=18});
list.Add(new UserInfo() { Name = "oec2004" ,Age=18});
var distnctList = list.DistinctBy(x=>x.Age);
foreach (var item in distnctList)
{
Console.WriteLine(item.Name);
}
public class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
}
上のコードのDistinctByメソッドは. NET Core 3.1には存在しないため、DistinctByメソッドを拡張しましたが、. NET 8でデフォルトで利用可能になったため、メソッドの競合が発生します。拡張メソッドを削除してデフォルトを使用するだけです。

実行する。
上記のコンパイルの問題のいくつかを解決した後、プログラムは正常に起動することができ、プロセス全体はまだ非常に高速ですが、マイクロソフトの技術の後方互換性は非常に良いと言わなければならず、ツールの祝福と相まって、新しいバージョンにアップグレードする圧力と負担はありません。
対照的に、他のテクノロジーは絶えず更新されていますが、主流は特定のバージョンを使用しています。