次の方法で共有


.NET Framework から .NET Core への移行に関する破壊的変更

アプリを .NET Framework から .NET Core バージョン 1.0 から 3.1 に移行する場合、この記事に記載されている破壊的変更が影響を受ける可能性があります。 破壊的変更は、導入された .NET Core のバージョンによって、カテゴリ別、およびカテゴリ内でグループ化されます。

この記事は、.NET Framework と .NET Core の間の重大な変更の完全な一覧ではありません。 最も重要な重大なシステム変更は、わかり次第ここに追加されます。

コア .NET ライブラリ

.NET 8

IDispatchImplAttribute API が削除されました

.NET Core 2.1

UseShellExecute の既定値の変更

ProcessStartInfo.UseShellExecute の既定値は .NET Core の false です。 .NET Framework では、既定値は true

変更の説明

Process.Start を使用すると、たとえば Paint を起動する Process.Start("mspaint.exe") などのコードを使用して、アプリケーションを直接起動できます。 また、 ProcessStartInfo.UseShellExecutetrueに設定されている場合は、関連するアプリケーションを間接的に起動することもできます。 .NET Framework では、 ProcessStartInfo.UseShellExecute の既定値は trueです。つまり、 Process.Start("mytextfile.txt") などのコードは、そのエディターに.txtファイルを関連付けた場合にメモ帳 起動します。 .NET Framework でアプリを間接的に起動しないようにするには、 ProcessStartInfo.UseShellExecute を明示的に false に設定する必要があります。 .NET Core では、 ProcessStartInfo.UseShellExecute の既定値は false。 つまり、既定では、 Process.Startを呼び出すときに、関連付けられているアプリケーションは起動されません。

System.Diagnostics.ProcessStartInfoの次のプロパティは、ProcessStartInfo.UseShellExecutetrueされている場合にのみ機能します。

この変更は、パフォーマンス上の理由から .NET Core で導入されました。 通常、 Process.Start はアプリケーションを直接起動するために使用されます。 アプリを直接起動する場合、Windows シェルを使用する必要はないため、関連するパフォーマンス コストが発生します。 この既定のケースを高速化するために、.NET Core では既定値の ProcessStartInfo.UseShellExecutefalse に変更されます。 必要に応じて、低速パスにオプトインできます。

導入されたバージョン

2.1

以前のバージョンの .NET Core では、 UseShellExecute は Windows 用に実装されていませんでした。

アプリが古い動作に依存している場合は、Process.Start(ProcessStartInfo)UseShellExecutetrueに設定してProcessStartInfo オブジェクトを呼び出します。

カテゴリ

コア .NET ライブラリ

影響を受ける API


.NET Core 1.0

FileSystemInfo.Attributes によってスローされる UnauthorizedAccessException

.NET Core では、呼び出し元がファイル属性値を設定しようとして、書き込みアクセス許可がない場合、UnauthorizedAccessException がスローされます。

変更の説明

.NET Framework では、呼び出し元が ArgumentException でファイル属性値を設定しようとして、書き込みアクセス許可がない場合、FileSystemInfo.Attributes がスローされます。 .NET Core では、代わりに UnauthorizedAccessException がスローされます (.NET Core では、呼び出し元が無効なファイル属性を設定しようとした場合でも ArgumentException がスローされます)。

導入されたバージョン

1.0

必要に応じて、catchの代わりにUnauthorizedAccessExceptionをキャッチするように、ArgumentExceptionステートメントを変更します。

カテゴリ

コア .NET ライブラリ

影響を受ける API


破損した状態の例外の処理はサポートされていません

.NET Core での破損プロセス状態例外の処理はサポートされていません。

変更の説明

以前は、C# で try-catch ステートメントを使用するなど、マネージド コードの例外ハンドラーによって、破損したプロセス状態の例外をキャッチして処理できました。

.NET Core 1.0 以降では、破損したプロセス状態の例外はマネージド コードでは処理できません。 共通言語ランタイムは、破損したプロセス状態の例外をマネージド コードに提供しません。

導入されたバージョン

1.0

破損したプロセス状態の例外を処理する必要を避け、それらを引き起こす状況に対処することを検討してください。 破損したプロセス状態の例外を処理する必要がある場合は、C または C++ コードで例外ハンドラーを記述します。

カテゴリ

コア .NET ライブラリ

影響を受ける API


UriBuilder プロパティはもはや先頭文字を追加しません

UriBuilder.Fragment は、先頭 # 文字の先頭に付加されなくなり、 UriBuilder.Query が既に存在する場合は先頭 ? 文字の先頭に付加されなくなります。

変更の説明

.NET Framework では、 UriBuilder.Fragment プロパティと UriBuilder.Query プロパティは、常に、格納される値の先頭に # または ? 文字を付加します。 この動作により、文字列にこれらの先頭文字のいずれかが既に含まれている場合、格納された値に複数の # または ? 文字が含まれる可能性があります。 たとえば、 UriBuilder.Fragment の値が ##mainになる場合があります。

.NET Core 1.0以降、これらのプロパティは、文字列の先頭に#または?文字が既に存在している場合、それらを追加しなくなりました。

導入されたバージョン

1.0

プロパティ値を設定するときに、これらの先頭文字を明示的に削除する必要がなくなりました。 これは、値を追加するときに特に便利です。追加するたびに先頭の #? を削除する必要がなくなったためです。

たとえば、次のコード スニペットは、.NET Framework と .NET Core の動作の違いを示しています。

var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";

Console.WriteLine(builder.Query);
  • .NET Framework では、出力は ????one=1&two=2&three=3&four=4
  • .NET Core では、出力は ?one=1&two=2&three=3&four=4

カテゴリ

コア .NET ライブラリ

影響を受ける API


Process.StartInfo は、開始しなかったプロセスに対して InvalidOperationException をスローします

コードで開始されなかったプロセスの Process.StartInfo プロパティの読み取りによって、InvalidOperationException がスローされます。

変更の説明

.NET Framework で、コードが開始しなかったプロセスの Process.StartInfo プロパティにアクセスすると、ダミーの ProcessStartInfo オブジェクトが返されます。 ダミー オブジェクトには、 EnvironmentVariablesを除くすべてのプロパティの既定値が含まれています。

.NET Core 1.0 以降では、開始されなかった (Process.StartInfo が呼びされなかった) プロセスの Process.Start プロパティを読み取ると、InvalidOperationException がスローされます。

導入されたバージョン

1.0

コードが開始されなかったプロセスの Process.StartInfo プロパティにアクセスしないでください。 たとえば、 Process.GetProcessesによって返されるプロセスについては、このプロパティを読み取らないでください。

カテゴリ

コア .NET ライブラリ

影響を受ける API


暗号

.NET Core 2.1

SignedCms.ComputeSignature のブール値パラメーターが優先されます

.NET Core では、silent メソッドのブールSignedCms.ComputeSignature(CmsSigner, Boolean) パラメーターが考慮されます。 このパラメーターが true に設定されている場合、PIN プロンプトは表示されません。

変更の説明

.NET Framework では、silent メソッドのSignedCms.ComputeSignature(CmsSigner, Boolean) パラメーターは無視され、プロバイダーが必要とする場合は常に PIN プロンプトが表示されます。 .NET Core では、 silent パラメーターが優先され、 trueに設定されている場合、プロバイダーが必要とする場合でも PIN プロンプトは表示されません。

CMS/PKCS #7 メッセージのサポートは、バージョン 2.1 で .NET Core に導入されました。

導入されたバージョン

2.1

必要に応じて PIN プロンプトが表示されるようにするには、デスクトップ アプリケーションで SignedCms.ComputeSignature(CmsSigner, Boolean) を呼び出し、Boolean パラメーターを false に設定する必要があります。 結果の動作は、サイレント コンテキストが無効になっているかどうかに関係なく、.NET Framework の場合と同じです。

カテゴリ

暗号

影響を受ける API


MSBuild

.NET Core 3.0

リソース マニフェストのファイル名の変更

.NET Core 3.0 以降では、既定の場合、MSBuild によってリソース ファイルに対して異なるマニフェスト ファイル名が生成されます。

導入されたバージョン

3.0

変更の説明

.NET Core 3.0 より前では、プロジェクト ファイルの LogicalName 項目に ManifestResourceNameDependentUpon、または EmbeddedResource メタデータが指定されなかった場合、MSBuild ではパターン <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources でマニフェスト ファイル名が生成されていました。 RootNamespace がプロジェクト ファイルで定義されていない場合は、既定でそのプロジェクトの名前になります。 たとえば、ルート プロジェクト ディレクトリ内の Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyProject.Form1.resources でした。

.NET Core 3.0 以降では、あるリソース ファイルが同じ名前のソース ファイルと併置されている場合 (たとえば、Form1.resxForm1.cs)、MSBuild ではそのソース ファイルの型情報が使用されてパターン <Namespace>.<ClassName>.resources でマニフェスト ファイル名が生成されます。 名前空間とクラス名は、併置されたソース ファイルの最初の型から抽出されます。 たとえば、Form1.cs という名前のソース ファイルと併置されている Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyNamespace.Form1.resources になります。 重要な注意点として、.NET Core の以前のバージョンとはファイル名の最初の部分が異なります (MyProject ではなく MyNamespace)。

プロジェクト ファイルの LogicalName 項目で ManifestResourceNameDependentUpon、または EmbeddedResource メタデータが指定されている場合、この変更はそのリソース ファイルには影響しません。

この破壊的変更は、.NET Core プロジェクトへの EmbeddedResourceUseDependentUponConvention プロパティの追加によって導入されました。 既定では、リソース ファイルは .NET Core プロジェクト ファイルに明示的にリストされていないため、生成された DependentUpon ファイルに名前を付ける方法を指定するための メタデータはありません。 EmbeddedResourceUseDependentUponConventiontrue に設定されている場合 (既定)、MSBuild では併置されたソース ファイルが検索され、そのファイルから名前空間とクラス名が抽出されます。 EmbeddedResourceUseDependentUponConventionfalse に設定すると、MSBuild では RootNamespace と相対ファイル パスを組み合わせた前の動作に従ってマニフェスト名が生成されます。

ほとんどの場合、開発者側でアクションを取る必要はなく、アプリは引き続き動作するはずです。 ただし、この変更によってアプリに影響が出ている場合は、次のいずれかを実行してください。

  • 新しいマニフェスト名を要求するようにコードを変更する。

  • プロジェクト ファイルで EmbeddedResourceUseDependentUponConventionfalse に設定して、新しい名前付け規則を無効にする。

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

カテゴリ

MSBuild

影響を受ける API

なし


ネットワーキング

.NET Core 2.0

WebClient.CancelAsync が常にすぐに取り消されるわけではありません

.NET Core 2.0 以降では、応答がフェッチを開始した場合、 WebClient.CancelAsync() を呼び出しても要求はすぐには取り消されません。

変更の説明

以前は、 WebClient.CancelAsync() 呼び出しはすぐに要求を取り消しました。 .NET Core 2.0 以降では、 WebClient.CancelAsync() を呼び出すと、応答がフェッチを開始していない場合にのみ、要求が直ちに取り消されます。 応答がフェッチを開始した場合、要求は完全な応答が読み取られた後にのみ取り消されます。

この変更は、WebClientを優先して HttpClient API が非推奨になるため実装されました。

導入されたバージョン

2.0

System.Net.Http.HttpClientの代わりに System.Net.WebClient クラスを使用します。これは非推奨です。

カテゴリ

ネットワーキング

影響を受ける API


Windows フォーム

Windows フォームのサポートは、バージョン 3.0 の .NET Core に追加されました。 Windows フォーム アプリを .NET Framework から .NET Core に移行する場合、ここに記載されている破壊的変更がアプリに影響する可能性があります。

.NET Core 3.1

削除されたコントロール

.NET Core 3.1 以降では、一部の Windows フォーム コントロールは使用できなくなりました。

変更の説明

.NET Core 3.1 以降では、さまざまな Windows フォーム コントロールは使用できなくなりました。 .NET Framework 2.0 では、より優れた設計とサポートを備える代替コントロールが導入されました。 非推奨のコントロールは、以前はデザイナー ツールボックスから削除されていましたが、引き続き使用できます。

次の種類は使用できなくなりました。

導入されたバージョン

3.1

削除された各コントロールには、推奨される置換コントロールがあります。 次の表を参照してください。

削除されたコントロール (API) 推奨される置換 削除される関連 API
コンテキストメニュー ContextMenuStrip
DataGrid DataGridView(データグリッドビュー) DataGridCell、DataGridRow、DataGridTableCollection、DataGridColumnCollection、DataGridTableStyle、DataGridColumnStyle、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、GridColumnStylesCollection、GridTableStylesCollection、HitTestType
MainMenu MenuStrip
メニュー ToolStripDropDown、ToolStripDropDownMenu メニューアイテムコレクション
メニュー項目 ToolStripMenuItem
ツールバー ツールストリップ ツールバーの外観
ツールバーボタン ツールストリップボタン ToolBarButtonClickEventArgs、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign

カテゴリ

Windows フォーム

影響を受ける API


ツールチップが表示されている場合、CellFormatting イベントが発生しない

マウスでポイントしたときと、キーボードで選択したときに、DataGridView にセルのテキストとエラーのヒントが表示されるようになりました。 ツールヒントが表示されている場合、 DataGridView.CellFormatting イベントは発生しません。

変更の説明

.NET Core 3.1 より前のバージョンでは、DataGridView プロパティが ShowCellToolTips に設定されたtrueは、セルのテキストとエラーに関して、マウスでセルをホバーしたときにツールチップが表示されていました。 キーボードを使用してセルを選択したときにヒントが表示されませんでした (たとえば、Tab キー、ショートカット キー、矢印ナビゲーションを使用)。 ユーザーがセルを編集し、 DataGridView がまだ編集モードの間に、 ToolTipText プロパティが設定されていないセルの上にマウス ポインターを置いた場合、セルに表示するセルのテキストを書式設定するために CellFormatting イベントが発生しました。

アクセシビリティ標準を満たすために、.NET Core 3.1 以降では、DataGridView プロパティが ShowCellToolTips に設定されたtrueには、セルのテキストのヒントと、セルがホバーされたときだけでなく、キーボードで選択されたときのエラーも表示されます。 この変更の結果、CellFormatting が編集モードのときに、 プロパティが設定されていないセルにマウスポインターを合わせても、ToolTipText イベントは発生DataGridView。 ホバーされたセルの内容がセルではなくツールチップとして表示されるため、イベントはトリガーされません。

導入されたバージョン

3.1

CellFormattingが編集モードの間、DataGridView イベントに依存するすべてのコードをリファクタリングします。

カテゴリ

Windows フォーム

影響を受ける API

無し


.NET Core 3.0

既定のコントロール フォントが Segoe UI 9 pt に変更されました

変更の説明

.NET Framework では、 Control.DefaultFont プロパティは Microsoft Sans Serif 8.25 pt に設定されました。 次の図は、既定のフォントを使用するウィンドウを示しています。

.NET Framework の既定のコントロール フォント

.NET Core 3.0 以降では、既定のフォントは Segoe UI 9 pt ( SystemFonts.MessageBoxFont と同じフォント) に設定されています。 この変更の結果、フォームとコントロールのサイズは、新しい既定のフォントのサイズを考慮して約 27% 大きくなります。 例えば次が挙げられます。

.NET Core の既定のコントロール フォント

この変更は、 Windows ユーザー エクスペリエンス (UX) のガイドラインに合わせて行われました。

導入されたバージョン

3.0

フォームとコントロールのサイズが変更されたため、アプリケーションが正しくレンダリングされるようにします。

1 つのフォームの元のフォントを保持するには、既定のフォントを Microsoft Sans Serif 8.25 ptに設定します。 例えば次が挙げられます。

public MyForm()
{
    InitializeComponent();
    Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}

または、次のいずれかの方法で、アプリケーション全体の既定のフォントを変更できます。

  • ApplicationDefaultFont MSBuild プロパティを "Microsoft Sans Serif, 8.25pt" に設定します。 これは、Visual Studio でデザイナーで新しい設定を使用できるため、推奨される手法です。

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Application.SetDefaultFont(Font)を呼び出すことによって。

    class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f));
            Application.Run(new Form1());
        }
    }
    

カテゴリ

  • Windows フォーム

影響を受ける API

なし。


FolderBrowserDialog の最新化

FolderBrowserDialog コントロールは、.NET Core 用の Windows フォーム アプリケーションで変更されました。

変更の説明

.NET Framework の Windows フォームでは、 FolderBrowserDialog コントロールに対して次のダイアログが使用されます。

.NET Framework の FolderBrowserDialogControl

.NET Core 3.0 では、Windows フォームは Windows Vista で導入された新しい COM ベースのコントロールを使用します。

.NET Core の FolderBrowserDialogControl

導入されたバージョン

3.0

ダイアログは自動的にアップグレードされます。

元のダイアログを保持する場合は、次のコード フラグメントに示すように、ダイアログを表示する前に、 FolderBrowserDialog.AutoUpgradeEnabled プロパティを false に設定します。

var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();

カテゴリ

Windows フォーム

影響を受ける API


SerializableAttribute が一部の Windows フォームの種類から削除されました

SerializableAttributeは、既知のバイナリ シリアル化シナリオがない一部の Windows フォーム クラスから削除されました。

変更の説明

次の型は、.NET Framework の SerializableAttribute で修飾されていますが、.NET Core では属性が削除されています。

これまで、このシリアル化メカニズムには重大なメンテナンスとセキュリティの問題がありました。 型に SerializableAttribute を維持することは、バージョン間のシリアル化の変更とフレームワーク間のシリアル化の変更について、これらの型をテストする必要があります。 これにより、これらの型を進化させるのが難しくなり、メンテナンスにかかるコストが高くなる可能性があります。 これらの型には、属性の削除による影響を最小限に抑える既知のバイナリ シリアル化シナリオはありません。

詳細については、「 バイナリシリアル化」を参照してください。

導入されたバージョン

3.0

シリアル化可能としてマークされているこれらの型に依存する可能性があるコードを更新します。

カテゴリ

Windows フォーム

影響を受ける API

  • 無し

AllowUpdateChildControlIndexForTabControls 互換性スイッチはサポートされていません

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls互換性スイッチは、.NET Framework 4.6 以降のバージョンの Windows フォームではサポートされていますが、.NET Core または .NET 5.0 以降ではサポートされていません。

変更の説明

.NET Framework 4.6 以降のバージョンでは、タブを選択するとコントロール コレクションの順序が変更されます。 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls互換性スイッチを使用すると、この動作が望ましくない場合に、アプリケーションでこの並べ替えをスキップできます。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • 無し

DomainUpDown.UseLegacyScrolling 互換性スイッチはサポートされていません

.NET Framework 4.7.1 で導入された Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.7.1 以降、 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 互換性スイッチを使用すると、開発者は独立した DomainUpDown.DownButton() および DomainUpDown.UpButton() アクションをオプトアウトできます。 スイッチは従来の動作を復元しました。コンテキスト テキストが存在する場合、DomainUpDown.UpButton()は無視され、開発者は DomainUpDown.DownButton() アクションの前にコントロールDomainUpDown.UpButton()アクションを使用する必要があります。 詳細については、「 <AppContextSwitchOverrides> 要素」を参照してください。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


DoNotLoadLatestRichEditControl 互換性スイッチがサポートされていません

.NET Framework 4.7.1 で導入された Switch.System.Windows.Forms.UseLegacyImages 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.6.2 以前のバージョンでは、 RichTextBox コントロールは Win32 RichEdit コントロール v3.0 をインスタンス化し、.NET Framework 4.7.1 をターゲットとするアプリケーションの場合、 RichTextBox コントロールは RichEdit v4.1 をインスタンス化します ( msftedit.dll)。 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl互換性スイッチが導入され、.NET Framework 4.7.1 以降のバージョンを対象とするアプリケーションが新しい RichEdit v4.1 コントロールをオプトアウトし、代わりに古い RichEdit v3 コントロールを使用できるようになりました。

.NET Core および .NET 5.0 以降のバージョンでは、 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl スイッチはサポートされていません。 RichTextBox コントロールの新しいバージョンのみがサポートされます。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


DoNotSupportSelectAllShortcutInMultilineTextBox 互換性スイッチはサポートされていません

.NET Framework 4.6.1 で導入された Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 互換性スイッチは、.NET Core および .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.6.1 以降、 コントロールで + TextBox ショートカット キーを選択すると、すべてのテキストが選択されました。 .NET Framework 4.6 以前のバージョンでは、 + プロパティと プロパティの両方がに設定されている場合、TextBox.MultilinetrueA ショートカット キーを選択すると、すべてのテキストを選択できませんでした。 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox互換性スイッチは、元の動作を保持するために .NET Framework 4.6.1 で導入されました。 詳細については、TextBox.ProcessCmdKeyを参照してください。

.NET Core および .NET 5.0 以降のバージョンでは、 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • 無し

DontSupportReentrantFilterMessage 互換性スイッチがサポートされていません

.NET Framework 4.6.1 で導入された Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 互換性スイッチは、.NET Core および .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.6.1 以降では、Switch.System.Windows.Forms.DontSupportReentrantFilterMessage互換性スイッチは、IndexOutOfRangeException メッセージがカスタム Application.FilterMessage実装で呼び出されたときに発生する可能性のあるIMessageFilter.PreFilterMessage例外に対処します。 詳細については、「 軽減策: カスタム IMessageFilter.PreFilterMessage の実装」を参照してください。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


EnableVisualStyleValidation 互換性スイッチはサポートされていません

Switch.System.Windows.Forms.EnableVisualStyleValidation互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework では、 Switch.System.Windows.Forms.EnableVisualStyleValidation 互換性スイッチを使用すると、アプリケーションは数値形式で指定されたビジュアル スタイルの検証をオプトアウトできます。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.EnableVisualStyleValidation スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • 無し

UseLegacyContextMenuStripSourceControlValue 互換性スイッチはサポートされていません

.NET Framework 4.7.2 で導入された Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.7.2 以降では、 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 互換性スイッチを使用すると、開発者は ContextMenuStrip.SourceControl プロパティの新しい動作をオプトアウトできます。これにより、ソース管理への参照が返されるようになりました。 プロパティの以前の動作は、 nullを返すものでした。 詳細については、「 <AppContextSwitchOverrides> 要素」を参照してください。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


UseLegacyImages 互換性スイッチはサポートされていません

.NET Framework 4.8 で導入された Switch.System.Windows.Forms.UseLegacyImages 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

変更の説明

.NET Framework 4.8 以降、 Switch.System.Windows.Forms.UseLegacyImages 互換性スイッチは、高 DPI 環境での ClickOnce シナリオで発生する可能性のある画像スケーリングの問題に対処しました。 trueに設定すると、このスイッチを使用すると、スケールが 100%を超えるスケールに設定されている高 DPI ディスプレイで従来のイメージ スケーリングを復元できます。 詳細については、GitHub の .NET Framework 4.8 リリース ノート を参照してください。

.NET Core および .NET 5.0 以降では、 Switch.System.Windows.Forms.UseLegacyImages スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • 無し

「アバウトテンプレートとスプラッシュスクリーンテンプレートが壊れている」

Visual Studio によって生成された About.vb ファイルと SplashScreen.vb ファイルには、.NET Core 3.0 および 3.1 では使用できない My 名前空間内の型への参照が含まれています。

導入されたバージョン

3.0

変更の説明

.NET Core 3.0 および 3.1 には、Visual Basic My の完全なサポートは含まれません。 Visual Studio for Visual Basic Windows フォーム アプリの About フォーム テンプレートと SplashScreen フォーム テンプレートは、使用できない My.Application.Info 型のプロパティを参照します。

Visual Basic My のサポートが .NET 5 で改善され、プロジェクトが .NET 5 以降にアップグレードされました。

-又は-

アプリの About 型と SplashScreen 型のコンパイラ エラーを修正します。 System.Reflection.Assembly クラスを使用して、My.Application.Info型によって提供される情報を取得します。 両方の形態のストレートポートはここで利用可能です。

ヒント

これはサンプル コードであり、最適化されません。 フォームの読み込み時間を短縮するために、属性の一覧をキャッシュする必要があります。

概要

Imports System.Reflection

Public NotInheritable Class About

    Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the title of the form.
        Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(applicationTitle) Then
            applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        Me.Text = String.Format("About {0}", applicationTitle)
        ' Initialize all of the text displayed on the About Box.
        ' TODO: Customize the application's assembly information in the "Application" pane of the project
        '    properties dialog (under the "Project" menu).
        Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
        Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
        Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
        Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
        Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
    End Sub

    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
        Me.Close()
    End Sub

End Class

SplashScreen

Imports System.Reflection

Public NotInheritable Class SplashScreen

    Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Set up the dialog text at runtime according to the application's assembly information.  

        'TODO: Customize the application's assembly information in the "Application" pane of the project
        '  properties dialog (under the "Project" menu).

        'Application title
        Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(appTitle) Then
            appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        ApplicationTitle.Text = appTitle

        Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version

        'Format the version information using the text set into the Version control at design time as the
        '  formatting string.  This allows for effective localization if desired.
        '  Build and revision information could be included by using the following code and changing the
        '  Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar.  See
        '  String.Format() in Help for more information.
        '
        '    Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)

        Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)

        'Copyright info
        Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
    End Sub

End Class

カテゴリ

Visual Basic Windows フォーム

影響を受ける API

無し


Microsoft.VisualBasic.ApplicationServices 名前空間の型は使用できません

Microsoft.VisualBasic.ApplicationServices名前空間の型は使用できません。

導入されたバージョン

.NET Core 3.0

変更の説明

Microsoft.VisualBasic.ApplicationServices名前空間の型は、.NET Framework で使用できました。 .NET Core 3.0 - 3.1 では使用できません。

不要なアセンブリ依存関係や後続のリリースでの破壊的変更を回避するために、型が削除されました。

この名前空間は .NET 5 で追加されました。プロジェクトを .NET 5 以降にアップグレードします。

-又は-

コードが Microsoft.VisualBasic.ApplicationServices 型とそのメンバーの使用に依存している場合は、.NET クラス ライブラリで対応する型またはメンバーを使用できる場合があります。 たとえば、一部の System.Environment メンバーと System.Security.Principal.WindowsIdentity メンバーは、 Microsoft.VisualBasic.ApplicationServices.User クラスのプロパティと同等の機能を提供します。

カテゴリ

Visual Basic

影響を受ける API


Microsoft.VisualBasic.Devices 名前空間の型は使用できません

Microsoft.VisualBasic.Devices名前空間の型は使用できません。

導入されたバージョン

.NET Core 3.0

変更の説明

Microsoft.VisualBasic.Devices名前空間の型は、.NET Framework で使用できました。 .NET Core 3.0 - 3.1 では使用できません。

不要なアセンブリ依存関係や後続のリリースでの破壊的変更を回避するために、型が削除されました。

この名前空間は .NET 5 で追加されました。プロジェクトを .NET 5 以降にアップグレードします。

-又は-

コードが Microsoft.VisualBasic.Devices 型とそのメンバーの使用に依存している場合は、.NET クラス ライブラリで対応する型またはメンバーを使用できる場合があります。 たとえば、 Microsoft.VisualBasic.Devices.Clock クラスと同等の機能は System.DateTime 型と System.Environment 型によって提供され、 Microsoft.VisualBasic.Devices.Ports クラスと同等の機能は System.IO.Ports 名前空間の型によって提供されます。

カテゴリ

Visual Basic

影響を受ける API


Microsoft.VisualBasic.MyServices 名前空間の型は使用できません

Microsoft.VisualBasic.MyServices名前空間の型は使用できません。

導入されたバージョン

.NET Core 3.0

変更の説明

Microsoft.VisualBasic.MyServices名前空間の型は、.NET Framework で使用できました。 .NET Core 3.0 - 3.1 では使用できません。

不要なアセンブリ依存関係や後続のリリースでの破壊的変更を回避するために、型が削除されました。

この名前空間は .NET 5 で追加されました。プロジェクトを .NET 5 以降にアップグレードします。

-又は-

コードが Microsoft.VisualBasic.MyServices 型とそのメンバーの使用に依存している場合、.NET クラス ライブラリには対応する型とメンバーがあります。 Microsoft.VisualBasic.MyServices 型と同等の .NET クラス ライブラリ型のマッピングを次に示します。

Microsoft.VisualBasic.MyServices の型 .NET クラス ライブラリの種類
ClipboardProxy System.Windows.ClipboardWPF アプリケーションの場合、System.Windows.Forms.ClipboardWindows フォーム アプリケーションの場合
FileSystemProxy System.IO名前空間の型
RegistryProxy Microsoft.Win32名前空間のレジストリ関連の型
SpecialDirectoriesProxy Environment.GetFolderPath

カテゴリ

Visual Basic

影響を受ける API


こちらも参照ください