.NET Framework から .NET Core への移行の破壊的変更
.NET Framework から .NET Core (バージョン 1.0 から 3.1 まで) にアプリを移行する場合、この記事の一覧にある破壊的変更による影響を受ける可能性があります。 破壊的変更はカテゴリ別に分類され、そのカテゴリ内では、導入された .NET Core のバージョンによってグループ化されます。
注意
この記事は、.NET Framework と .NET Core の間の破壊的変更の完全な一覧ではありません。 最も重要な破壊的変更が認識されると、こちらに追加されます。
Core .NET ライブラリ
- UseShellExecute の既定値の変更
- IDispatchImplAttribute API が削除されました
- FileSystemInfo.Attributes によってスローされる UnauthorizedAccessException
- プロセス破損状態例外の処理がサポートされない
- UriBuilder のプロパティでは今後、先頭に文字が付加されない
- 開始されなかったプロセスについて Process.StartInfo が InvalidOperationException をスローする
.NET 8
IDispatchImplAttribute API が削除されました
.NET Core 2.1
UseShellExecute の既定値の変更
ProcessStartInfo.UseShellExecute の .NET Core での既定値は false
です。 .NET Framework での既定値は true
です。
変更の説明
Process.Start では、たとえば、ペイントを起動する Process.Start("mspaint.exe")
などのコードを使用して、アプリケーションを直接起動することができます。 また、ProcessStartInfo.UseShellExecute が true
に設定されている場合、関連付けられているアプリケーションを間接的に起動することもできます。 .NET Framework では、ProcessStartInfo.UseShellExecute の既定値は true
です。つまり、 .txt ファイルをメモ帳に関連付けていれば、Process.Start("mytextfile.txt")
のようなコードではそのエディターが起動されます。 .NET Framework でアプリケーションを間接的に起動しないようにするには、明示的に ProcessStartInfo.UseShellExecute を false
に設定する必要があります。 .NET Core で、ProcessStartInfo.UseShellExecute の既定値は false
です。 つまり、既定では、Process.Start
を呼び出したとき、関連付けられているアプリケーションは起動されません。
System.Diagnostics.ProcessStartInfo の次のプロパティは、ProcessStartInfo.UseShellExecute が true
の場合にのみ機能します。
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle。
この変更は、パフォーマンス上の理由で .NET Core に導入されました。 通常、Process.Start は、アプリケーションを直接起動するために使用されます。 アプリケーションを直接起動するのに、Windows シェルを使用して、関連するパフォーマンス コストを生じさせる必要はありません。 この既定のケースを高速化するために、.NET Core では、ProcessStartInfo.UseShellExecute の既定値を false
に変更します。 必要に応じて、低速パスを選択できます。
導入されたバージョン
2.1
注意
.NET Core の以前のバージョンでは、Windows に対して UseShellExecute
は実装されていませんでした。
推奨アクション
アプリが古い動作に依存している場合は、ProcessStartInfo オブジェクトで UseShellExecute を true
に設定して 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
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy 要素
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
項目に LogicalName
、ManifestResourceName
、または DependentUpon
メタデータが指定されなかった場合、MSBuild ではパターン <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
でマニフェスト ファイル名が生成されていました。 RootNamespace
がプロジェクト ファイルで定義されていない場合は、既定でそのプロジェクトの名前になります。 たとえば、ルート プロジェクト ディレクトリ内の Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyProject.Form1.resources でした。
.NET Core 3.0 以降では、あるリソース ファイルが同じ名前のソース ファイルと併置されている場合 (たとえば、Form1.resx と Form1.cs)、MSBuild ではそのソース ファイルの型情報が使用されてパターン <Namespace>.<ClassName>.resources
でマニフェスト ファイル名が生成されます。 名前空間とクラス名は、併置されたソース ファイルの最初の型から抽出されます。 たとえば、Form1.cs という名前のソース ファイルと併置されている Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyNamespace.Form1.resources になります。 重要な注意点として、.NET Core の以前のバージョンとはファイル名の最初の部分が異なります (MyProject ではなく MyNamespace)。
注意
プロジェクト ファイルの EmbeddedResource
項目で LogicalName
、ManifestResourceName
、または DependentUpon
メタデータが指定されている場合、この変更はそのリソース ファイルには影響しません。
この破壊的変更は、.NET Core プロジェクトへの EmbeddedResourceUseDependentUponConvention
プロパティの追加によって導入されました。 既定では、リソース ファイルは .NET Core プロジェクト ファイルに明示的にリストされていないため、生成された .resources ファイルに名前を付ける方法を指定するための DependentUpon
メタデータはありません。 EmbeddedResourceUseDependentUponConvention
が true
に設定されている場合 (既定)、MSBuild では併置されたソース ファイルが検索され、そのファイルから名前空間とクラス名が抽出されます。 EmbeddedResourceUseDependentUponConvention
を false
に設定すると、MSBuild では RootNamespace
と相対ファイル パスを組み合わせた前の動作に従ってマニフェスト名が生成されます。
推奨アクション
ほとんどの場合、開発者側でアクションを取る必要はなく、アプリは引き続き動作するはずです。 ただし、この変更によってアプリに影響が出ている場合は、次のいずれかを実行してください。
新しいマニフェスト名を要求するようにコードを変更する。
プロジェクト ファイルで
EmbeddedResourceUseDependentUponConvention
をfalse
に設定して、新しい名前付け規則を無効にする。<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 フォーム アプリを移行する場合、アプリがこの記事の一覧にある破壊的変更による影響を受ける可能性があります。
- 削除されたコントロール
- ヒントが表示されていると CellFormatting が発生しない
- Control.DefaultFont を Segoe UI 9 pt に変更
- FolderBrowserDialog の最新化
- 一部の Windows フォーム型から SerializableAttribute を削除
- AllowUpdateChildControlIndexForTabControls 互換性スイッチがサポートされない
- DomainUpDown.UseLegacyScrolling 互換性スイッチがサポートされない
- DoNotLoadLatestRichEditControl 互換性スイッチがサポートされない
- DoNotSupportSelectAllShortcutInMultilineTextBox 互換性スイッチがサポートされない
- DontSupportReentrantFilterMessage 互換性スイッチがサポートされない
- EnableVisualStyleValidation 互換性スイッチがサポートされない
- UseLegacyContextMenuStripSourceControlValue 互換性スイッチがサポートされない
- UseLegacyImages 互換性スイッチがサポートされない
- Visual Basic 用の About および SplashScreen テンプレートが破損している
- Microsoft.VisualBasic.ApplicationServices 名前空間の型は使用できない
- Microsoft.VisualBasic.Devices 名前空間の型は使用できない
- Microsoft.VisualBasic.MyServices 名前空間の型は使用できない
.NET Core 3.1
削除されたコントロール
.NET Core 3.1 より、一部の Windows フォーム コントロールが利用できません。
変更の説明
.NET Core 3.1 より、さまざまな Windows フォーム コントロールが利用できなくなっています。 デザインとサポートが改善された代替コントロールは .NET Framework 2.0 で導入されました。 非推奨コントロールは前にデザイナー ツールボックスから削除されましたが、引き続き利用できました。
次の型は現在なくなっています。
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
導入されたバージョン
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
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
ヒントが表示されていると 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 Core 3.0 以降では、既定のフォントは Segoe UI 9 pt
(SystemFonts.MessageBoxFont と同じフォント) に設定されています。 この変更により、大きくなった新しい既定のフォント サイズに対応するために、フォームとコントロールのサイズが約 27% 大きくなっています。 次に例を示します。
この変更は、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 Core 3.0 では、Windows フォームにより、Windows Vista で導入された次の新しい COM ベースのコントロールが使用されます。
導入されたバージョン
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 では削除されています。
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
従来、このシリアル化メカニズムには、メンテナンスとセキュリティに関して重大な問題がありました。 型の 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
関連項目
.NET