次の方法で共有


.NET Framework から .NET Core への移行の破壊的変更

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

注意

この記事は、.NET Framework と .NET Core の間の破壊的変更の完全な一覧ではありません。 最も重要な破壊的変更が認識されると、こちらに追加されます。

Core .NET ライブラリ

.NET 8

IDispatchImplAttribute API が削除されました

.NET Core 2.1

UseShellExecute の既定値の変更

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

変更の説明

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

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

この変更は、パフォーマンス上の理由で .NET Core に導入されました。 通常、Process.Start は、アプリケーションを直接起動するために使用されます。 アプリケーションを直接起動するのに、Windows シェルを使用して、関連するパフォーマンス コストを生じさせる必要はありません。 この既定のケースを高速化するために、.NET Core では、ProcessStartInfo.UseShellExecute の既定値を false に変更します。 必要に応じて、低速パスを選択できます。

導入されたバージョン

2.1

注意

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

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

カテゴリ

Core .NET ライブラリ

影響を受ける API


.NET Core 1.0

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

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

変更の説明

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

導入されたバージョン

1.0

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

カテゴリ

Core .NET ライブラリ

影響を受ける API


破損状態例外の処理がサポートされない

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

変更の説明

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

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

導入されたバージョン

1.0

代わりに、そのような例外をもたらした状況に対処することで、プロセス破損状態例外を処理する必要がないようにします。 プロセス破損状態例外をどうしても処理する必要がある場合は、C または C++ のコードで例外ハンドラーを記述します。

カテゴリ

Core .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 です。

カテゴリ

Core .NET ライブラリ

影響を受ける API


開始されなかったプロセスについて Process.StartInfo が InvalidOperationException をスローする

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

変更の説明

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

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

導入されたバージョン

1.0

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

カテゴリ

Core .NET ライブラリ

影響を受ける API


暗号

.NET Core 2.1

SignedCms.ComputeSignature のブール型パラメーターの尊重

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

変更の説明

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

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

導入されたバージョン

2.1

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

カテゴリ

暗号

影響を受ける API


MSBuild

.NET Core 3.0

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

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

導入されたバージョン

3.0

変更の説明

.NET Core 3.0 より前では、プロジェクト ファイルの EmbeddedResource 項目に LogicalNameManifestResourceName、または DependentUpon メタデータが指定されなかった場合、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)。

注意

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

この破壊的変更は、.NET Core プロジェクトへの EmbeddedResourceUseDependentUponConvention プロパティの追加によって導入されました。 既定では、リソース ファイルは .NET Core プロジェクト ファイルに明示的にリストされていないため、生成された .resources ファイルに名前を付ける方法を指定するための 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 API が非推奨になり、HttpClient に取って代わられたことにあります。

導入されたバージョン

2.0

非推奨になっている System.Net.WebClient ではなく、System.Net.Http.HttpClient クラスを使用してください。

カテゴリ

ネットワーキング

影響を受ける API


Windows フォーム

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

.NET Core 3.1

削除されたコントロール

.NET Core 3.1 より、一部の Windows フォーム コントロールが利用できません。

変更の説明

.NET Core 3.1 より、さまざまな Windows フォーム コントロールが利用できなくなっています。 デザインとサポートが改善された代替コントロールは .NET Framework 2.0 で導入されました。 非推奨コントロールは前にデザイナー ツールボックスから削除されましたが、引き続き利用できました。

次の型は現在なくなっています。

導入されたバージョン

3.1

削除されたコントロールにはいずれも、推奨の代替コントロールが与えられています。 次の表を参照してください。

削除されたコントロール (API) 推奨代替 削除されている関連 API
ContextMenu ContextMenuStrip
DataGrid DataGridView DataGridCell、DataGridRow、DataGridTableCollection、DataGridColumnCollection、DataGridTableStyle、DataGridColumnStyle、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、GridColumnStylesCollection、GridTableStylesCollection、HitTestType
MainMenu MenuStrip
メニュー ToolStripDropDown、ToolStripDropDownMenu MenuItemCollection
MenuItem ToolStripMenuItem
ToolBar ToolStrip ToolBarAppearance
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign

カテゴリ

Windows フォーム

影響を受ける API


ヒントが表示されていると CellFormatting が発生しない

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

変更の説明

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

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

導入されたバージョン

3.1

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

カテゴリ

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.UpButton() アクションの前に DomainUpDown.DownButton() アクションを使用する必要があります。 詳細については、「<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 コントロールで Ctrl + A ショートカット キーを押すと、すべてのテキストが選択されるようになりました。 .NET Framework 4.6 およびそれ以前のバージョンでは、Textbox.ShortcutsEnabled および TextBox.Multiline プロパティが true に選択されていた場合、Ctrl + A ショートカット キーを選択してもすべてのテキストが選択されませんでした。 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 互換性スイッチでは、カスタムの IMessageFilter.PreFilterMessage 実装で IndexOutOfRangeException メッセージが呼び出されたときに発生する可能性がある Application.FilterMessage 例外に対処します。 詳細については、「軽減策: カスタムの 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

  • なし

About および SplashScreen テンプレートが破損している

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 Basic Windows フォーム アプリ用の Visual Studio の 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 WPF アプリケーションの場合は System.Windows.Clipboard、Windows フォーム アプリケーションの場合は System.Windows.Forms.Clipboard
FileSystemProxy System.IO 名前空間の型
RegistryProxy Microsoft.Win32 名前空間のレジストリ関連の型
SpecialDirectoriesProxy Environment.GetFolderPath

カテゴリ

Visual Basic

影響を受ける API


関連項目