.NET Framework から .NET にアップグレードした後に最新化する

この記事では、アプリを .NET Framework から .NET にアップグレードした後に最新化するさまざまな方法について説明します。 .NET アップグレード アシスタント ツールを使用して、アプリを .NET にアップグレードします。

不足している API

.NET Framework アプリをアップグレードする際に、おそらく非互換性がいくつか見つかります。 これは、.NET Framework は Windows 専用のテクノロジであり、.NET はクロスプラットフォーム テクノロジであるためです。 一部のライブラリはそうではありません。 たとえば、.NET には、.NET Framework のように、Windows レジストリにアクセスするための追加設定なしですぐに使用できる API がありません。 Windows レジストリのサポートは、Microsoft.Win32.Registry NuGet パッケージによって提供されます。 .NET Framework 固有のライブラリの多くは.NET または .NET Standard に移植されており、NuGet でホストされています。 プロジェクトに見つからない参照がある場合は、NuGet を検索してください。

Windows 互換機能パック

移行後に、新しいバージョンの .NET でサポートされていない .NET Framework API の依存関係がいくつかある場合は、Microsoft.Windows.Compatibility NuGet パッケージでそれらが見つかることがあります。 これにより .NET プロジェクトに約 20,000 個の API が追加され、プロジェクトで使用できる API セットが大幅に増加します。 これらの API には、Windows Management Instrumentation (WMI) や Windows EventLog に関連するものなど、Windows 専用の API が含まれます。 詳細については、「Windows 互換機能パックを使用してコードを .NET に移植する」を参照してください

Web ブラウザー コントロール

Windows Presentation Foundation や Windows フォームなど、Windows デスクトップ テクノロジを対象とするプロジェクトには、Web ブラウザー コントロールが含まれる場合があります。 提供される Web ブラウザー コントロールは、HTML5 やその他の最新の Web テクノロジより前に設計された可能性が高く、古いと見なされます。 Microsoft では、Web ブラウザー コントロールに代わる最新のものとして、Microsoft.Web.WebView2NuGet パッケージを発行しています。

App.config

.NET Framework では、App.config ファイルを使用して、接続文字列やログ プロバイダー構成などのアプリの設定を読み込みます。 最新の .NET では、アプリ設定に appsettings.json ファイルを使用します。 アップグレード アシスタントの CLI バージョンでは、App.config ファイルの appsettings.json への変換が処理されますが、Visual Studio 拡張機能では処理されません。

ヒント

appsettings.json ファイルを使用しない場合は、System.Configuration.ConfigurationManager NuGet パッケージをアプリに追加すると、コードがコンパイルされ、App.config ファイルが使用されます。

appsettings.json は、設定と接続文字列を格納および取得するための最新の方法ですが、アプリには App.config ファイルを使用するコードが残っています。 アプリが移行されると、System.Configuration.ConfigurationManager NuGet パッケージがプロジェクトに追加され、App.config ファイルを使用するコードのコンパイルが続行されます。

ライブラリが .NET にアップグレードされると、App.config ではなく、appsettings.json をサポートするように最新化されます。たとえば、.NET 6 以降用にアップグレードされた .NET Framework のログ プロバイダーで、設定に App.config が使用されなくなりました。 この方針に従って、App.config の使用を停止することをお勧めします。

appsettings.json のサポートは、Microsoft.Extensions.Configuration NuGet パッケージによって提供されます。

appsettings.json ファイルを構成プロバイダーとして使用するには、次のステップを実行します。

  1. アップグレードされたアプリによって参照されている場合は、System.Configuration.ConfigurationManager NuGet パッケージまたはライブラリを削除します。

  2. Microsoft.Extensions.Configuration.Json NuGet パッケージを追加します。

  3. appsettings.json という名前のファイルを作成します。

    1. [ソリューション エクスプローラー] ウィンドウでプロジェクト ファイルを右クリックし、[追加]>[新しい項目...] を選択します。
    2. 検索ボックスに「 json」と入力します。
    3. JavaScript JSON 構成ファイル テンプレートを選択し、[名前]appsettings.json に設定します。
    4. [追加] を押して、新しいファイルをプロジェクトに追加します。
  4. 出力ディレクトリにコピーする appsettings.json ファイルを設定します。

    [ソリューション エクスプローラー] ウィンドウで、appsettings.json ファイルを見つけて、次のプロパティを設定します。

    • [ビルド アクション]: [コンテンツ]
    • [出力ディレクトリにコピー]: [常にコピーする]
  5. アプリの起動コードで、設定ファイルを読み込む必要があります。

    アプリの起動コードは、プロジェクトの種類によって異なります。 たとえば、WPF アプリではグローバル セットアップに App.xaml.cs ファイルを使用し、Windows フォーム アプリでは起動に Program.Main メソッドを使用します。 いずれの場合も、起動時に次の 2 つのことを行う必要があります。

    • アプリ内のどこからでもアクセスできる internal static (Visual Basic では Friend Shared) メンバーを作成する。
    • 起動時に、そのメンバーにインスタンスを割り当てる。

    次の例では、Config という名前のメンバーを作成し、Main メソッドでインスタンスを割り当て、接続文字列を読み込みます。

    using Microsoft.Extensions.Configuration;
    
    internal class Program
    {
        internal static IConfiguration Config { get; private set; }
    
        private static void Main(string[] args)
        {
            Config = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .Build();
    
            // Use the config file to get a connection string
            string? myConnectionString = Config.GetConnectionString("database");
    
            // Run the rest of your app
        }
    }
    
    Imports Microsoft.Extensions.Configuration
    
    Module Program
    
        Private _config As IConfiguration
    
        ' Shared not required since Program is a Module
        Friend Property Config As IConfiguration
    
            Get
                Return _config
            End Get
            Private Set(value As IConfiguration)
                _config = value
            End Set
    
        End Property
    
        Sub Main(args As String())
    
            Config = New ConfigurationBuilder() _
                .AddJsonFile("appsettings.json") _
                .Build()
    
            ' Use the config file to get a connection string
            Dim myConnectionString As String = Config.GetConnectionString("database")
    
            ' Run the rest of your app
        End Sub
    End Module
    
  6. 新しい構成 API を使用するようにコードの残りの部分を更新します。

  7. App.config ファイルをプロジェクトから削除します。

    注意事項

    App.config ファイルなしでアプリが正しく実行されていることを確認します。 ソース管理を使用するか、ファイルを別の場所にコピーして、App.config ファイルをバックアップします。 アプリを十分にテストしたら、App.config ファイルを削除します。