.NET アップグレード アシスタントを使用して WPF アプリを .NET 6 にアップグレードする

.NET アップグレード アシスタントは、.NET Framework WPF アプリを .NET 6 にアップグレードするときに役立つコマンドライン ツールです。 この記事では、次について説明します。

  • .NET Framework WPF アプリに対してツールを実行する方法のデモ
  • トラブルシューティングのヒント

ツールのインストール方法の詳細については、「.NET アップグレード アシスタントの概要」を参照してください。

デモ アプリ

基本 WPF サンプル プロジェクトを使用して、アップグレード アシスタントによるアップグレードをテストできます。

アプリを分析

.NET アップグレード アシスタント ツールは、アプリのアップグレードの簡易ドライ ランを実行する分析モードを備えています。 アップグレードを開始する前にどのような変更が必要になるかに関する分析情報が提供される場合があります。 ターミナルを開き、ターゲット プロジェクトまたはソリューションが配置されているフォルダーに移動します。 アップグレードするプロジェクトまたはソリューションの名前を指定して、upgrade-assistant analyze コマンドを実行します。

たとえば、基本 WPF サンプル アプリで分析モードを実行すると、次の出力が生成されます。これは、アップグレードする前に変更する必要がないことを示しています。

> upgrade-assistant analyze .\WebSiteRatings.sln

[09:50:56 INF] Loaded 5 extensions
[09:50:57 INF] Using MSBuild from C:\Program Files\dotnet\sdk\6.0.101\
[09:50:57 INF] Using Visual Studio install from C:\Program Files\Microsoft Visual Studio\2022\Preview [v17]
[09:50:59 INF] Recommending executable TFM net6.0 because the project builds to a web app
[09:50:59 INF] Recommending Windows TFM net6.0-windows because the project either has Windows-specific dependencies or builds to a WinExe
[09:50:59 INF] Marking assembly reference System.Configuration for removal based on package mapping configuration System.Configuration
[09:50:59 INF] Adding package System.Configuration.ConfigurationManager based on package mapping configuration System.Configuration
[09:50:59 INF] Marking assembly reference System.Web for removal based on package mapping configuration ASP.NET
[09:50:59 INF] Adding framework reference Microsoft.AspNetCore.App based on package mapping configuration ASP.NET
[09:50:59 INF] Marking assembly reference System.Web.Extensions for removal based on package mapping configuration ASP.NET
[09:51:00 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.3.261602) needs to be added
[09:51:01 INF] Adding Microsoft.Windows.Compatibility 6.0.0
[09:51:01 INF] Recommending Windows TFM net6.0-windows because the project either has Windows-specific dependencies or builds to a WinExe
[09:51:01 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.3.261602) needs to be added
[09:51:01 INF] Adding Microsoft.Windows.Compatibility 6.0.0
[09:51:01 INF] Running analyzers on WebSiteRatings
[09:51:02 INF] Identified 0 diagnostics in project WebSiteRatings
[09:51:02 INF] Running analyzers on StarVoteControl
[09:51:02 INF] Identified 0 diagnostics in project StarVoteControl

出力には非常に多くの内部診断情報が含まれていますが、役に立つのはその一部だけです。 分析モードは、プロジェクトが net6.0-windows ターゲット フレームワーク モニカー (net6.0-windows) を対象とするようにアップグレードで推奨されることを示していることに注意してください。 これは、ソリューションによって参照されるプロジェクトが、Windows 専用のテクノロジである WPF プロジェクトであるためです。 一部の Windows 固有のライブラリを使用していなかった場合は、コンソール アプリケーションが TFM net6.0 への直接アップグレードを推奨されます。

エラーまたは警告が報告された場合は、アップグレードを開始する前に、それらに対処してください。

upgrade-assistant の実行

ターミナルを開き、ターゲット プロジェクトまたはソリューションが配置されているフォルダーに移動します。 アップグレードするプロジェクトまたはソリューションの名前を指定して、upgrade-assistant upgrade コマンドを実行します。

プロジェクトを指定した場合は、そのプロジェクトですぐにアップグレード プロセスが開始されます。 ソリューションを指定した場合は、通常実行するプロジェクト (アップグレード エントリポイントという) を選択します。 そのプロジェクトに基づいて、依存関係グラフが作成され、プロジェクトをアップグレードする順序に関する提案が表示されます。

upgrade-assistant upgrade .\WebSiteRatings.sln

ツールが実行され、行われるステップの一覧が表示されます。 ステップが完了するたびに、一連のコマンドがツールに表示されます。これらのコマンドを使用すると、次のステップを適用またはスキップしたり、次のような他のオプションを適用またはスキップしたりできます。

  • ステップの詳細を確認する。
  • プロジェクトを変更する。
  • ログ設定を調整する。
  • アップグレードを停止して終了する。

数字を選択せずに Enter キーを押すと、一覧の最初の項目が選択されます。

各ステップの初期化時に、そのステップを適用するとどうなるかに関する情報が提供される場合があります。

エントリポイントの選択

サンプル アプリをアップグレードする最初のステップは、ソリューション内でエントリポイント プロジェクトとして機能するプロジェクトを選択することです。

Upgrade Steps

1. [Next step] Select an entrypoint
2. Select project to upgrade

Choose a command:
   1. Apply next step (Select an entrypoint)
   2. Skip next step (Select an entrypoint)
   3. See more step details
   4. Configure logging
   5. Exit

コマンド 1 を選択して、そのステップを開始します。 次のような結果が表示されます。

[13:28:49 INF] Applying upgrade step Select an entrypoint
Please select the project you run. We will then analyze the dependencies and identify the recommended order to upgrade projects.
   1. StarVoteControl
   2. WebSiteRatings

2 つのプロジェクトが一覧表示されます。メインの WPF アプリ (WebSiteRatings) と UserControl プロジェクト (StarVoteControl) です。 エントリポイントとして WebSiteRatings プロジェクト (項目 2) を選択します。

アップグレードするプロジェクトの選択

エントリポイントが決定されたら、次のステップは最初にアップグレードするプロジェクトを選択することです。 この例では、ツールが、メインの WPF アプリ プロジェクトがコントロールに依存しているため、WPF UserControl プロジェクト (StarVoteControl) を最初にアップグレードする必要があると判断しました。

[13:44:47 INF] Applying upgrade step Select project to upgrade
Here is the recommended order to upgrade. Select enter to follow this list, or input the project you want to start with.
   1. StarVoteControl
   2. WebSiteRatings

ここで推奨されるパスは、WebSiteRatings プロジェクトが依存している StarVoteControl プロジェクトを最初にアップグレードすることです。 推奨されるアップグレード パスに従うことをお勧めします。

StarVoteControl のアップグレードは単純なプロジェクトであり、アップグレード後に問題は発生しません。 そのため、この記事では、そのプロジェクトが既にアップグレードされており、次にアップグレードするプロジェクトは WebSiteRatings であるとして先に進みます。

プロジェクトのアップグレード

プロジェクトを選択すると、ツールで実行されるアップグレード ステップの一覧が表示されます。

重要

この例では、WebSiteRatings プロジェクトについて説明します。 StarVoteControl プロジェクトが正常にアップグレードされたものとします。 WebSiteRatings プロジェクトを示す理由は、アプリをアップグレードするときに発生する一般的な問題の多くが含まれているためです。

アップグレードするプロジェクトに応じて、この例のすべてのステップが表示される場合と表示されない場合があります。

次の出力は、プロジェクトのアップグレードに関連するステップを示しています。

[16:09:24 INF] Initializing upgrade step Back up project

Upgrade Steps

Entrypoint: C:\code\migration\wpf\sampleApp\WebSiteRatings\WebSiteRatings.csproj
Current Project: C:\code\migration\wpf\sampleApp\WebSiteRatings\WebSiteRatings.csproj

1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
4. Update TFM
5. Update NuGet Packages
6. Add template files
7. Upgrade app config files
    a. Convert Application Settings
    b. Convert Connection Strings
    c. Disable unsupported configuration sections
8. Update source code
    a. Apply fix for UA0002: Types should be upgraded
    b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
9. Move to next project

Choose a command:
   1. Apply next step (Back up project)
   2. Skip next step (Back up project)
   3. See more step details
   4. Select different project
   5. Configure logging
   6. Exit

Note

この記事の残りの部分では、指摘すべき重要なポイントがない限り、アップグレード ステップを省略します。各ステップの結果は表示されます。

バックアップの作成

プロジェクトをアップグレードするこの例では、各ステップを適用します。 最初のステップであるコマンド 1 は、プロジェクトのバックアップです。

[16:10:42 INF] Applying upgrade step Back up project
Please choose a backup path
   1. Use default path [C:\code\migration\wpf\sampleApp.backup]
   2. Enter custom path

ツールは、現在のフォルダーの後ろに .backup が付加された既定のバックアップ パスを選択します。 既定のパスの代わりにカスタム パスを選択することもできます。 アップグレードするプロジェクトごとに、プロジェクトのフォルダーがバックアップ フォルダーにコピーされます。 この例では、バックアップ ステップ中に、WebSiteRatings フォルダーが WebSiteRatings から sampleApp.backup\WebSiteRatings にコピーされます。

[16:10:44 INF] Backing up C:\code\migration\wpf\sampleApp\WebSiteRatings to C:\code\migration\wpf\sampleApp.backup\WebSiteRatings
[16:10:45 INF] Project backed up to C:\code\migration\wpf\sampleApp.backup\WebSiteRatings
[16:10:45 INF] Upgrade step Back up project applied successfully
Please press enter to continue...

プロジェクト ファイルのアップグレード

プロジェクトは、.NET Framework プロジェクト形式から .NET SDK プロジェクト形式にアップグレードされます。

[16:10:51 INF] Applying upgrade step Convert project file to SDK style
[16:10:51 INF] Converting project file format with try-convert, version 0.3.261602+8aa571efd8bac422c95c35df9c7b9567ad534ad0
[16:10:51 INF] Recommending TFM net6.0-windows because of dependency on project C:\code\migration\wpf\sampleApp\StarVoteControl\StarVoteControl.csproj
C:\code\migration\wpf\sampleApp\WebSiteRatings\WebSiteRatings.csproj contains an App.config file. App.config is replaced by appsettings.json in .NET Core. You will need to delete App.config and migrate to appsettings.json if it's applicable to your project.
[16:10:52 INF] Converting project C:\code\migration\wpf\sampleApp\WebSiteRatings\WebSiteRatings.csproj to SDK style
[16:10:53 INF] Project file converted successfully! The project may require additional changes to build successfully against the new .NET target.
[16:10:55 INF] Upgrade step Convert project file to SDK style applied successfully
Please press enter to continue...

各ステップの出力に注目してください。 出力例は、アップグレード後に手動で完了すべき手順を示していることに注意してください。

App.config は、.NET Core の appsettings.json に置き換えられます。 プロジェクトに該当する場合は、App.config アプリを削除し、appsettings.json に移行する必要があります。

このアップグレード ステップの一環として、packages.config によって参照される NuGet パッケージがプロジェクト ファイルに移行されます。

NuGet 参照のクリーンアップ

プロジェクト形式が更新されたら、次のステップは NuGet パッケージ参照をクリーンアップすることです。

アプリによって参照されるパッケージに加えて、packages.config ファイルには、それらのパッケージの依存関係への参照が含まれています。 たとえば、パッケージ B に依存しているパッケージ A への参照を追加した場合は、両方のパッケージが packages.config ファイルで参照されます。 新しいプロジェクト システムでは、パッケージ A への参照だけが必要です。 このステップでは、パッケージ参照を分析し、不要な参照を削除します。

[16:55:18 INF] Applying upgrade step Clean up NuGet package references
[16:55:18 INF] Removing outdated assembly reference: System.Configuration
[16:55:18 INF] Removing outdated package reference: ControlzEx, Version=4.4.0
[16:55:18 INF] Removing outdated package reference: Microsoft.Xaml.Behaviors.Wpf, Version=1.1.19
[16:55:18 INF] Removing outdated package reference: SQLite.Native, Version=3.12.3
[16:55:18 INF] Adding package reference: System.Configuration.ConfigurationManager, Version=5.0.0
[16:55:18 INF] Adding package reference: Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, Version=0.3.261602
[16:55:21 WRN] No version of System.Configuration.ConfigurationManager found that supports ["net452"]; leaving unchanged
[16:55:21 INF] Upgrade step Clean up NuGet package references applied successfully
Please press enter to continue...

アプリは引き続き .NET Framework アセンブリを参照しています。 これらのアセンブリの一部は、NuGet パッケージとして利用できます。 このステップでは、これらのアセンブリを分析し、該当する NuGet パッケージを参照します。

TFM の処理

次に、ツールは、TFM を .NET Framework から提案された SDK に変更します。 この例では net6.0-windows です。

[16:56:36 INF] Applying upgrade step Update TFM
[16:56:36 INF] Recommending TFM net6.0-windows because of dependency on project C:\code\migration\wpf\sampleApp\StarVoteControl\StarVoteControl.csproj
[16:56:40 INF] Updated TFM to net6.0-windows
[16:56:40 INF] Upgrade step Update TFM applied successfully
Please press enter to continue...

NuGet パッケージのアップグレード

次に、ツールは、プロジェクトの NuGet パッケージを、更新された TFM (net6.0-windows) をサポートするバージョンに更新します。

[16:58:06 INF] Applying upgrade step Update NuGet Packages
[16:58:06 INF] Removing outdated package reference: Microsoft.CSharp, Version=4.7.0
[16:58:06 INF] Removing outdated package reference: System.Data.DataSetExtensions, Version=4.5.0
[16:58:06 INF] Removing outdated package reference: EntityFramework, Version=6.2.0
[16:58:06 INF] Adding package reference: EntityFramework, Version=6.4.4
[16:58:11 INF] Upgrade step Update NuGet Packages applied successfully
Please press enter to continue...

テンプレート、構成、およびコード ファイル

ツールがプロジェクトに対して行う必要がないと判断した場合は、次の数ステップが自動的にスキップされます。

パッケージが更新されたら、次のステップはテンプレート ファイルを更新することです。 この例では、更新またはプロジェクトに追加する必要があるテンプレート ファイルはありません。 このステップはスキップされ、次のステップ (アプリ構成ファイルのアップグレード) が自動的に開始されます。 この例では、やるべきことは接続文字列を変換することだけです。

[17:02:52 INF] Applying upgrade step Convert Connection Strings
[17:02:53 INF] Upgrade step Convert Connection Strings applied successfully
[17:02:53 INF] Applying upgrade step Upgrade app config files
[17:02:53 INF] Upgrade step Upgrade app config files applied successfully

このプロジェクトのアップグレードが完了する前の最後のステップは、古いコード参照を更新することです。 このステップでは、アップグレードするプロジェクトの種類に基づいて、既知のコード修正の一覧が表示されます。 修正プログラムの一部がプロジェクトに該当しない場合があります。

8. Update source code
    a. Apply fix for UA0002: Types should be upgraded
    b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist

その場合は、提案された修正プログラムのすべてがサンプル プロジェクトに適用されません。このステップは、前のステップが完了した直後に自動的に終了します。

[17:02:58 INF] Initializing upgrade step Update source code
[17:02:58 INF] Running analyzers on WebSiteRatings
[17:02:59 INF] Identified 0 diagnostics in project WebSiteRatings
[17:02:59 INF] Initializing upgrade step Move to next project

アップグレードの完了

移行するプロジェクトがまだある場合は、次にアップグレードするプロジェクトを選択するように促されます。 アップグレードするプロジェクトがこれ以上ない場合は、"アップグレードの最終処理" ステップに誘導されます。

1. [Next step] Finalize upgrade

Choose a command:
   1. Apply next step (Finalize upgrade)
   2. Skip next step (Finalize upgrade)
   3. See more step details
   4. Configure logging
   5. Exit

アップグレードが完了すると、移行された WPF プロジェクトが次の XML のように表示されます。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0-windows</TargetFramework>
    <OutputType>WinExe</OutputType>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <UseWPF>true</UseWPF>
    <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
  </PropertyGroup>
  <ItemGroup>
    <None Update="sqlite.db">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\StarVoteControl\StarVoteControl.csproj" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
    <PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.3.261602">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="EntityFramework" Version="6.4.4" />
  </ItemGroup>
  <ItemGroup>
    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="MahApps.Metro" Version="2.4.9" />
    <PackageReference Include="Microsoft.Data.Sqlite" Version="1.0.0" />
    <PackageReference Include="SQLite" Version="3.12.3" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="appsettings.json" />
  </ItemGroup>
</Project>

.NET アップグレード アシスタントが、アップグレード プロセスを続けるのに役立つアナライザー (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers NuGet パッケージなど) をプロジェクトに追加していることに注目してください。

アップグレード後

プロジェクトをアップグレードしたら、それらをコンパイルしてテストする必要があります。 ほとんどの場合、アップグレードを完了させるために他にもやることがあります。 アプリの .NET Framework バージョンに、プロジェクトで実際に使用されていないライブラリ参照が含まれている可能性があります。 各参照を分析し、それが必要かどうかを判断する必要があります。 また、ツールが、NuGet パッケージ参照を間違ったバージョンに追加またはアップグレードしている可能性もあります。

この記事が公開された時点で、サンプル プロジェクトのアップグレードを完了するには、次の更新が必要です。

  • System.Configuration.ConfigurationManager NuGet パッケージをバージョン System.Configuration.ConfigurationManager にアップグレードします。 アップグレード ツールによって間違ったバージョン (5.0.0) が選択されました。

    <PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
    

その項目が修正されたら、サンプル アプリがコンパイルされ、実行されます。 ただし、アップグレード可能な項目が他にもあります。たとえば、このアプリは、.NET Framework を直接サポートしている最新バージョンである Microsoft.Data.Sqlite 1.0.0 NuGet パッケージを使用しています。 このパッケージは SQLite パッケージに依存しています。 Microsoft.Data.Sqlite6.0.0 用にアップグレードされると、その依存関係が削除されます。

最新化: appsettings.json

.NET Framework は、App.config ファイルを使用して、接続文字列やログ プロバイダーなどのアプリの設定を読み込みます。 .NET は、アプリ設定に appsettings.json ファイルを使用するようになりました。

App.config ファイルは、 NuGet パッケージを通して .NET でサポートされます。また、appsettings.json のサポートは、 NuGet パッケージによって提供されます。

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

前のセクションでアップグレードした WPF サンプル アプリを使用して、System.Configuration.ConfigurationManager との依存関係を削除し、ローカル データベースで使用される接続文字列用に System.Configuration.ConfigurationManager に移行できます。

  1. System.Configuration.ConfigurationManager NuGet パッケージを削除します。

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

    アプリには、Microsoft.Extensions.Configuration 関連のさまざまな NuGet パッケージが必要になる場合があります。

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

    このサンプル アプリでは、このファイルに 1 つの接続文字列のみが含まれており、その文字列はアップグレード ツールによって appsettings.json ファイルに移行されています。

  4. 出力ディレクトリにコピーする appsettings.json ファイルを設定します。

    Visual Studio の [プロパティ] ペインを通して設定するか、プロジェクトを直接編集して次の を追加します。

      <ItemGroup>
        <Content Include="appsettings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
  5. App.xaml.cs ファイルを編集して、appsettings.json ファイルを読み込む構成オブジェクトを設定すると、追加された行が強調表示されます。

    using System.Windows;
    using Microsoft.Extensions.Configuration;
    
    namespace WebSiteRatings
    {
        /// <summary>
        /// Interaction logic for App.xaml
        /// </summary>
        public partial class App : Application
        {
            public static IConfiguration Config { get; private set; }
    
            public App()
            {
                Config = new ConfigurationBuilder()
                    .AddJsonFile("appsettings.json")
                    .Build();
            }
        }
    }
    
  6. .\Models\Database.cs ファイルで、新しい App.Config プロパティを使用するように メソッドを変更します。 これには、Microsoft.Extensions.Configuration 名前空間をインポートする必要があります。

    using Microsoft.Data.Sqlite;
    using System.Collections.Generic;
    using Microsoft.Extensions.Configuration;
    
    namespace WebSiteRatings.Models
    {
        internal class Database
        {
            public static SqliteConnection OpenConnection() =>
                new SqliteConnection(App.Config.GetConnectionString("database"));
    
            // More code below...
    

    GetConnectionString は、Microsoft.Extensions.Configuration 名前空間によって提供される拡張メソッドです。

最新化: Web ブラウザー コントロール

プロジェクトによって参照される WebBrowser コントロールは、古い Internet Explorer に基づいています。 WPF for .NET には、Microsoft Edge に基づく新しいブラウザー コントロールが含まれています。 次の手順を実行して、新しい WebView2 Web ブラウザー コントロールにアップグレードします。

  1. Microsoft.Web.WebView2 NuGet パッケージへの参照を追加します。

  2. MainWindow.xaml ファイルで:

    1. ルート要素の wpfControls 名前空間にコントロールをインポートします。

      <mah:MetroWindow x:Class="WebSiteRatings.MainWindow"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
              xmlns:local="clr-namespace:WebSiteRatings"
              xmlns:vm="clr-namespace:WebSiteRatings.ViewModels"
              xmlns:VoteControl="clr-namespace:StarVoteControl;assembly=StarVoteControl"
              xmlns:wpfControls="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
              Loaded="MetroWindow_Loaded"
              mc:Ignorable="d"
              Title="My Sites" Height="650" Width="1000">
      
    2. <Border> 要素が宣言されている場所で、WebBrowser コントロールを削除し、wpfControls:WebView2 コントロールに置き換えます。

      <Border Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="Black" Margin="5">
          <wpfControls:WebView2 x:Name="browser" ScrollViewer.CanContentScroll="True" />
      </Border>
      
  3. MainWindow.xaml.cs 分離コード ファイルを編集します。 ListBox_SelectionChanged メソッドを更新して、browser.Source プロパティを有効な Uri に設定します。 これまで、このコードは Web サイトの URL を文字列として渡していましたが、新しい WebView2 コントロールには Uri が必要です。

    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var siteCollection = (ViewModels.SiteCollection)DataContext;
    
        if (siteCollection.SelectedSite != null)
            browser.Source = new Uri(siteCollection.SelectedSite.Url);
        else
            browser.NavigateToString("<body></body>");
    }
    

アプリのユーザーが実行している Windows のバージョンに応じて、WebView2 ランタイムをインストールしなければならない場合があります。 詳細については、「WPF アプリでの WebView2 の使用を開始する」を参照してください。

Visual Basic プロジェクト

Visual Basic を使用してプロジェクトをコーディングしている場合は、アップグレード アシスタントに、My 名前空間の移行などの追加の手順が含まれることがあります。 プロジェクトでこれらの機能を使用している場合にのみ、これらのステップが追加されます。 サンプル アプリでは、MatchingGame.Logic 内のコードで 名前空間を使用してレジストリにアクセスされます。 このプロジェクトに、My に関連するステップが含まれます。

7. Update Visual Basic project
    a. Update vbproj to support "My." namespace

トラブルシューティングのヒント

.NET アップグレード アシスタントの使用時に発生するおそれがある既知の問題がいくつかあります。 場合によっては、.NET アップグレード アシスタントで内部的に使用される try-convert ツールに問題が発生することがあります。

その他のトラブルシューティングのヒントと既知の問題については、ツールの GitHub リポジトリを参照してください。

関連項目