Melanggar perubahan untuk migrasi dari .NET Framework ke .NET Core

Jika Anda memigrasikan aplikasi dari .NET Framework ke .NET Core versi 1.0 hingga 3.1, perubahan mencolok yang tercantum dalam artikel ini dapat memengaruhi Anda. Perubahan yang melanggar dikelompokkan menurut kategori, dan dalam kategori tersebut, berdasarkan versi .NET Core tempat mereka diperkenalkan.

Catatan

Artikel ini bukan daftar lengkap perubahan mencolok antara .NET Framework dan .NET Core. Perubahan melanggar yang paling penting ditambahkan di sini saat kita menyadarinya.

Pustaka .NET Inti

.NET 8

API IDispatchImplAttribute dihapus

.NET Core 2.1

Perubahan nilai default UseShellExecute

ProcessStartInfo.UseShellExecute memiliki nilai false default pada .NET Core. Pada .NET Framework, nilai defaultnya adalah true.

Deskripsi perubahan

Process.Start memungkinkan Anda meluncurkan aplikasi secara langsung, misalnya, dengan kode seperti Process.Start("mspaint.exe") yang meluncurkan Paint. Ini juga memungkinkan Anda secara tidak langsung meluncurkan aplikasi terkait jika ProcessStartInfo.UseShellExecute diatur ke true. Pada .NET Framework, nilai default untuk ProcessStartInfo.UseShellExecute adalah true, yang berarti bahwa kode seperti Process.Start("mytextfile.txt") akan meluncurkan Notepad, jika Anda telah mengaitkan file .txt dengan editor tersebut. Untuk mencegah peluncuran aplikasi secara tidak langsung di .NET Framework, Anda harus secara eksplisit mengatur ProcessStartInfo.UseShellExecute ke false. Pada .NET Core, nilai default untuk ProcessStartInfo.UseShellExecute adalah false. Ini berarti bahwa, secara default, aplikasi terkait tidak diluncurkan saat Anda memanggil Process.Start.

Properti System.Diagnostics.ProcessStartInfo berikut ini hanya berfungsi ketika ProcessStartInfo.UseShellExecute adalah true:

Perubahan ini diperkenalkan di .NET Core karena alasan performa. Biasanya, Process.Start digunakan untuk meluncurkan aplikasi secara langsung. Meluncurkan aplikasi secara langsung tidak perlu melibatkan shell Windows dan dikenakan biaya performa terkait. Untuk membuat kasus default ini lebih cepat, .NET Core mengubah nilai default menjadi ProcessStartInfo.UseShellExecutefalse. Anda dapat ikut serta ke jalur yang lebih lambat jika Anda membutuhkannya.

Versi yang diperkenalkan

2.1

Catatan

Dalam versi .NET Core yang lebih lama, UseShellExecute tidak diimplementasikan untuk Windows.

Jika aplikasi Anda bergantung pada perilaku lama, panggil Process.Start(ProcessStartInfo) dengan UseShellExecute diatur ke trueProcessStartInfo pada objek.

Kategori

Pustaka .NET Inti

API yang Terpengaruh


.NET Core 1.0

UnauthorizedAccessException dilemparkan oleh FileSystemInfo.Attributes

Di .NET Core, pemanggil UnauthorizedAccessException mencoba mengatur nilai atribut file tetapi tidak memiliki izin tulis.

Deskripsi perubahan

Di .NET Framework, pemanggil ArgumentException mencoba mengatur nilai atribut file tetapi FileSystemInfo.Attributes tidak memiliki izin tulis. Di .NET Core, dilemparkan UnauthorizedAccessException sebagai gantinya. (Di .NET Core, ArgumentException masih dilemparkan jika pemanggil mencoba mengatur atribut file yang tidak valid.)

Versi yang diperkenalkan

1.0

Ubah pernyataan apa pun catch untuk menangkap UnauthorizedAccessException alih-alih, atau selain, ArgumentException, seperlunya.

Kategori

Pustaka .NET Inti

API yang Terpengaruh


Menangani pengecualian status yang rusak tidak didukung

Menangani pengecualian status proses yang rusak di .NET Core tidak didukung.

Deskripsi perubahan

Sebelumnya, pengecualian status proses yang rusak dapat ditangkap dan ditangani oleh handler pengecualian kode terkelola, misalnya, dengan menggunakan pernyataan try-catch di C#.

Mulai dari .NET Core 1.0, pengecualian status proses yang rusak tidak dapat ditangani oleh kode terkelola. Runtime bahasa umum tidak memberikan pengecualian status proses yang rusak ke kode terkelola.

Versi yang diperkenalkan

1.0

Hindari kebutuhan untuk menangani pengecualian status proses yang rusak dengan mengatasi situasi yang mengarah padanya sebagai gantinya. Jika benar-benar diperlukan untuk menangani pengecualian status proses yang rusak, tulis handler pengecualian dalam kode C atau C++.

Kategori

Pustaka .NET Inti

API yang Terpengaruh


Properti UriBuilder tidak lagi menambahkan karakter utama

UriBuilder.Fragment tidak lagi menambahkan karakter utama # dan UriBuilder.Query tidak lagi menambahkan karakter utama ? ketika karakter sudah ada.

Deskripsi perubahan

Dalam .NET Framework, UriBuilder.Fragment properti dan UriBuilder.Query selalu menambahkan # masing-masing karakter atau ? ke nilai yang disimpan. Perilaku ini dapat menghasilkan beberapa #? karakter dalam nilai tersimpan jika string sudah berisi salah satu karakter utama ini. Misalnya, nilai UriBuilder.Fragment mungkin menjadi ##main.

Mulai dari .NET Core 1.0, properti ini tidak lagi menambahkan # karakter atau ? ke nilai tersimpan jika sudah ada di awal string.

Versi yang diperkenalkan

1.0

Anda tidak perlu lagi secara eksplisit menghapus salah satu karakter utama ini saat mengatur nilai properti. Ini sangat berguna ketika Anda menambahkan nilai, karena Anda tidak lagi harus menghapus yang terkemuka # atau ? setiap kali Anda menambahkan.

Misalnya, cuplikan kode berikut menunjukkan perbedaan perilaku antara .NET Framework dan .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);
  • Dalam .NET Framework, outputnya adalah ????one=1&two=2&three=3&four=4.
  • Di .NET Core, outputnya adalah ?one=1&two=2&three=3&four=4.

Kategori

Pustaka .NET Inti

API yang Terpengaruh


Process.StartInfo melempar InvalidOperationException untuk proses yang tidak Anda mulai

Process.StartInfo Membaca properti untuk proses yang kode Anda tidak mulai melempar .InvalidOperationException

Deskripsi perubahan

Di .NET Framework, mengakses Process.StartInfo properti untuk proses yang kode Anda tidak mulai mengembalikan objek dummy ProcessStartInfo . Objek dummy berisi nilai default untuk semua propertinya kecuali EnvironmentVariables.

Mulai dari .NET Core 1.0, jika Anda membaca Process.StartInfo properti untuk proses yang tidak Anda mulai (yaitu, dengan memanggil Process.Start), akan InvalidOperationException dilemparkan.

Versi yang diperkenalkan

1.0

Jangan akses Process.StartInfo properti untuk proses yang tidak dimulai kode Anda. Misalnya, jangan baca properti ini untuk proses yang dikembalikan oleh Process.GetProcesses.

Kategori

Pustaka .NET Inti

API yang Terpengaruh


Kriptografi

.NET Core 2.1

Parameter Boolean dari SignedCms.ComputeSignature dihormati

Di .NET Core, parameter Boolean silent dari metode dihormati SignedCms.ComputeSignature(CmsSigner, Boolean) . Perintah PIN tidak ditampilkan jika parameter ini diatur ke true.

Deskripsi perubahan

Di .NET Framework, silent parameter SignedCms.ComputeSignature(CmsSigner, Boolean) metode diabaikan, dan perintah PIN selalu ditampilkan jika diperlukan oleh penyedia. Di .NET Core, silent parameter dihormati, dan jika diatur ke true, perintah PIN tidak pernah ditampilkan, bahkan jika diperlukan oleh penyedia.

Dukungan untuk pesan CMS/PKCS #7 diperkenalkan ke .NET Core dalam versi 2.1.

Versi yang diperkenalkan

2.1

Untuk memastikan perintah PIN muncul jika diperlukan, aplikasi desktop harus memanggil SignedCms.ComputeSignature(CmsSigner, Boolean) dan mengatur parameter Boolean ke false. Perilaku yang dihasilkan sama seperti pada .NET Framework terlepas dari apakah konteks senyap dinonaktifkan di sana.

Kategori

Kriptografi

API yang Terpengaruh


MSBuild

.NET Core 3.0

Perubahan nama file manifes sumber daya

Mulai dari .NET Core 3.0, dalam kasus default, MSBuild menghasilkan nama file manifes yang berbeda untuk file sumber daya.

Versi yang diperkenalkan

3.0

Deskripsi perubahan

Sebelum .NET Core 3.0, jika tidak ada LogicalName, , atau DependentUpon metadata yang ditentukan untuk EmbeddedResource item dalam file proyek, MSBuild menghasilkan nama file manifes dalam pola <RootNamespace>.<ResourceFilePathFromProjectRoot>.resourcesManifestResourceName. Jika RootNamespace tidak didefinisikan dalam file proyek, itu default ke nama proyek. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx di direktori proyek akar adalah MyProject.Form1.resources.

Mulai dari .NET Core 3.0, jika file sumber daya dikolokasikan dengan file sumber dengan nama yang sama (misalnya, Form1.resx dan Form1.cs), MSBuild menggunakan informasi jenis dari file sumber untuk menghasilkan nama file manifes dalam pola <Namespace>.<ClassName>.resources. Namespace layanan dan nama kelas diekstrak dari jenis pertama dalam file sumber yang dikolokasi. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx yang dikolokasi dengan file sumber bernama Form1.cs adalah MyNamespace.Form1.resources. Hal utama yang perlu diperhatikan adalah bahwa bagian pertama dari nama file berbeda dengan versi .NET Core sebelumnya (MyNamespace alih-alih MyProject).

Catatan

Jika Anda memiliki LogicalNamemetadata , ManifestResourceName, atau DependentUpon yang ditentukan pada EmbeddedResource item dalam file proyek, perubahan ini tidak memengaruhi file sumber daya tersebut.

Perubahan yang melanggar ini diperkenalkan dengan penambahan properti ke EmbeddedResourceUseDependentUponConvention proyek .NET Core. Secara default, file sumber daya tidak secara eksplisit tercantum dalam file proyek .NET Core, sehingga file tersebut tidak DependentUpon memiliki metadata untuk menentukan cara menamai file .resources yang dihasilkan. Ketika EmbeddedResourceUseDependentUponConvention diatur ke true, yang merupakan default, MSBuild mencari file sumber yang dikolokasi dan mengekstrak namespace layanan dan nama kelas dari file tersebut. Jika Anda mengatur EmbeddedResourceUseDependentUponConvention ke false, MSBuild menghasilkan nama manifes sesuai dengan perilaku sebelumnya, yang menggabungkan RootNamespace dan jalur file relatif.

Dalam kebanyakan kasus, tidak ada tindakan yang diperlukan di bagian pengembang, dan aplikasi Anda harus terus berfungsi. Namun, jika perubahan ini merusak aplikasi, Anda dapat:

  • Ubah kode Anda untuk mengharapkan nama manifes baru.

  • Pilih keluar dari konvensi penamaan baru dengan mengatur EmbeddedResourceUseDependentUponConvention ke false dalam file proyek Anda.

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

Kategori

MSBuild

API yang Terpengaruh

T/A


Jaringan

.NET Core 2.0

WebClient.CancelAsync tidak selalu segera membatalkan

Mulai dari .NET Core 2.0, panggilan WebClient.CancelAsync() tidak segera membatalkan permintaan jika respons telah mulai diambil.

Deskripsi perubahan

Sebelumnya, panggilan WebClient.CancelAsync() segera membatalkan permintaan. Mulai dari .NET Core 2.0, panggilan WebClient.CancelAsync() membatalkan permintaan segera hanya jika respons belum mulai mengambil. Jika respons telah mulai diambil, permintaan dibatalkan hanya setelah respons lengkap dibaca.

Perubahan ini diterapkan karena WebClient API tidak digunakan lagi demi HttpClient.

Versi yang diperkenalkan

2.0

System.Net.Http.HttpClient Gunakan kelas alih-alih System.Net.WebClient, yang tidak digunakan lagi.

Kategori

Jaringan

API yang Terpengaruh


Formulir Windows

Formulir Windows dukungan ditambahkan ke .NET Core di versi 3.0. Jika Anda memigrasikan aplikasi Formulir Windows dari .NET Framework ke .NET Core, perubahan melanggar yang tercantum di sini dapat memengaruhi aplikasi Anda.

.NET Core 3.1

Kontrol yang dihapus

Mulai dari .NET Core 3.1, beberapa kontrol Formulir Windows tidak lagi tersedia.

Deskripsi perubahan

Dimulai dengan .NET Core 3.1, berbagai kontrol Formulir Windows tidak lagi tersedia. Kontrol penggantian yang memiliki desain dan dukungan yang lebih baik diperkenalkan dalam .NET Framework 2.0. Kontrol yang tidak digunakan lagi sebelumnya dihapus dari kotak alat perancang tetapi masih tersedia untuk digunakan.

Jenis berikut ini tidak lagi tersedia:

Versi yang diperkenalkan

3.1

Setiap kontrol yang dihapus memiliki kontrol penggantian yang direkomendasikan. Lihat tabel berikut:

Kontrol yang dihapus (API) Penggantian yang direkomendasikan API terkait yang dihapus
ContextMenu ContextMenuStrip
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
MainMenu MenuStrip
Menu ToolStripDropDown, ToolStripDropDownMenu MenuItemCollection
MenuItem ToolStripMenuItem
ToolBar ToolStrip ToolBarAppearance
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Formulir Windows

API yang Terpengaruh


Peristiwa CellFormatting tidak dimunculkan jika tipsalat ditampilkan

Sekarang DataGridView memperlihatkan teks sel dan tipsalat kesalahan saat diarahkan kursor ke mouse dan saat dipilih melalui keyboard. Jika tipsalat ditampilkan, DataGridView.CellFormatting peristiwa tidak dinaikkan.

Deskripsi perubahan

Sebelum .NET Core 3.1, DataGridView properti yang diatur ShowCellToolTips untuk true memperlihatkan tipsalat untuk teks dan kesalahan sel saat sel diarahkan oleh mouse. Tipsalat tidak ditampilkan saat sel dipilih melalui keyboard (misalnya, dengan menggunakan tombol Tab, tombol pintasan, atau navigasi panah). Jika pengguna mengedit sel, lalu, saat DataGridView masih dalam mode edit, arahkan mouse ke atas sel yang tidak memiliki ToolTipText kumpulan properti, CellFormatting peristiwa dinaikkan untuk memformat teks sel untuk ditampilkan dalam sel.

Untuk memenuhi standar aksesibilitas, mulai dari .NET Core 3.1, DataGridView yang memiliki ShowCellToolTips properti yang diatur untuk true menampilkan tipsalat untuk teks dan kesalahan sel tidak hanya saat sel diarahkan, tetapi juga saat dipilih melalui keyboard. Sebagai konsekuensi dari perubahan ini, CellFormatting peristiwa tidak dimunculkan ketika sel yang tidak memiliki ToolTipText kumpulan properti diarahkan ke saat DataGridView berada dalam mode edit. Peristiwa tidak dinaikkan karena konten sel yang diarahkan ditampilkan sebagai tipsalat alih-alih ditampilkan dalam sel.

Versi yang diperkenalkan

3.1

Refaktor kode apa pun yang bergantung pada CellFormatting peristiwa saat DataGridView berada dalam mode edit.

Kategori

Formulir Windows

API yang Terpengaruh

Tidak


.NET Core 3.0

Font kontrol default diubah menjadi Segoe UI 9 pt

Deskripsi perubahan

Di .NET Framework, Control.DefaultFont properti diatur ke Microsoft Sans Serif 8 pt. Gambar berikut menunjukkan jendela yang menggunakan font default.

Default control font in .NET Framework

Mulai dari .NET Core 3.0, font default diatur ke Segoe UI 9 pt (font yang sama dengan SystemFonts.MessageBoxFont). Akibat perubahan ini, formulir dan kontrol berukuran sekitar 27% lebih besar untuk memperhitungkan ukuran font default baru yang lebih besar. Misalnya:

Default control font in .NET Core

Perubahan ini dilakukan untuk menyelaraskan dengan panduan pengalaman pengguna (UX) Windows.

Versi yang diperkenalkan

3.0

Karena perubahan ukuran formulir dan kontrol, pastikan aplikasi Anda dirender dengan benar.

Untuk mempertahankan font asli, atur font default formulir Anda ke Microsoft Sans Serif 8 pt. Misalnya:

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

Kategori

  • Formulir Windows

API yang Terpengaruh

Tidak ada.


Modernisasi FolderBrowserDialog

Kontrol FolderBrowserDialog telah berubah dalam aplikasi Formulir Windows untuk .NET Core.

Deskripsi perubahan

Dalam .NET Framework, formulir Windows menggunakan dialog berikut untuk FolderBrowserDialog kontrol:

The FolderBrowserDialogControl in the .NET Framework

Di .NET Core 3.0, Formulir Windows menggunakan kontrol berbasis COM yang lebih baru yang diperkenalkan di Windows Vista:

The FolderBrowserDialogControl in the .NET Core

Versi yang diperkenalkan

3.0

Dialog akan dimutakhirkan secara otomatis.

Jika Anda ingin mempertahankan dialog asli, atur FolderBrowserDialog.AutoUpgradeEnabled properti ke false sebelum menampilkan dialog, seperti yang diilustrasikan oleh fragmen kode berikut:

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

Kategori

Formulir Windows

API yang Terpengaruh


SerializableAttribute dihapus dari beberapa jenis Formulir Windows

SerializableAttribute telah dihapus dari beberapa kelas Formulir Windows yang tidak memiliki skenario serialisasi biner yang diketahui.

Deskripsi perubahan

Jenis berikut dihiasi dengan SerializableAttribute dalam .NET Framework, tetapi atribut telah dihapus di .NET Core:

Secara historis, mekanisme serialisasi ini memiliki masalah pemeliharaan dan keamanan yang serius. Mempertahankan SerializableAttribute jenis berarti jenis tersebut harus diuji untuk perubahan serialisasi versi-ke-versi dan kemungkinan perubahan serialisasi kerangka kerja ke kerangka kerja. Ini membuatnya lebih sulit untuk mengembangkan jenis-jenis tersebut dan dapat mahal untuk dipertahankan. Jenis-jenis ini tidak memiliki skenario serialisasi biner yang diketahui, yang meminimalkan dampak penghapusan atribut.

Untuk informasi selengkapnya, lihat Serialisasi biner.

Versi yang diperkenalkan

3.0

Perbarui kode apa pun yang mungkin bergantung pada jenis ini yang ditandai sebagai dapat diserialisasikan.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas AllowUpdateChildControlIndexForTabControls tidak didukung

Sakelar Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibilitas didukung di Formulir Windows pada .NET Framework 4.6 dan versi yang lebih baru tetapi tidak didukung pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Di .NET Framework 4.6 dan versi yang lebih baru, memilih tab menyusun ulang koleksi kontrolnya. Sakelar Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibilitas memungkinkan aplikasi untuk melewati pengubahan ulang ini ketika perilaku ini tidak diinginkan.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas DomainUpDown.UseLegacyScrolling tidak didukung

Sakelar Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibilitas, yang diperkenalkan dalam .NET Framework 4.7.1, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.7.1, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling sakelar kompatibilitas memungkinkan pengembang untuk menolak independen DomainUpDown.DownButton() dan DomainUpDown.UpButton() tindakan. Sakelar memulihkan perilaku warisan, di mana DomainUpDown.UpButton() diabaikan jika teks konteks ada, dan pengembang diperlukan untuk menggunakan DomainUpDown.DownButton() tindakan pada kontrol sebelum DomainUpDown.UpButton() tindakan. Untuk informasi selengkapnya, lihat <elemen AppContextSwitchOverrides>.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas DoNotLoadLatestRichEditControl tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyImages kompatibilitas, yang diperkenalkan dalam .NET Framework 4.7.1, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dalam .NET Framework 4.6.2 dan versi sebelumnya, RichTextBox kontrol membuat instans kontrol Win32 RichEdit v3.0, dan untuk aplikasi yang menargetkan .NET Framework 4.7.1, RichTextBox kontrol membuat instans RichEdit v4.1 (dalam msftedit.dll). Sakelar Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl kompatibilitas diperkenalkan untuk memungkinkan aplikasi yang menargetkan .NET Framework 4.7.1 dan versi yang lebih baru untuk memilih keluar dari kontrol RichEdit v4.1 baru dan menggunakan kontrol RichEdit v3 lama sebagai gantinya.

Di .NET Core dan .NET 5.0 dan versi yang lebih baru, sakelar Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl tidak didukung. Hanya versi baru kontrol yang RichTextBox didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung

Sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitas, yang diperkenalkan di .NET Framework 4.6.1, tidak didukung di Formulir Windows pada .NET Core dan .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.6.1, memilih tombol pintasan Ctrl + A dalam TextBox kontrol memilih semua teks. Di .NET Framework 4.6 dan versi sebelumnya, memilih tombol pintasan Ctrl + A gagal memilih semua teks jika Textbox.ShortcutsEnabled dan TextBox.Multiline properti keduanya diatur ke .true Sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitas diperkenalkan dalam .NET Framework 4.6.1 untuk mempertahankan perilaku asli. Untuk informasi selengkapnya, lihat TextBox.ProcessCmdKey.

Di .NET Core dan .NET 5.0 dan versi yang lebih baru, sakelar Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas DontSupportReentrantFilterMessage tidak didukung

Sakelar Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitas, yang diperkenalkan di .NET Framework 4.6.1, tidak didukung di Formulir Windows pada .NET Core dan .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.6.1, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage sakelar kompatibilitas menangani kemungkinan IndexOutOfRangeException pengecualian ketika pesan dipanggil Application.FilterMessage dengan implementasi kustom IMessageFilter.PreFilterMessage . Untuk informasi selengkapnya, lihat Mitigasi: Implementasi IMessageFilter.PreFilterMessage Kustom.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.DontSupportReentrantFilterMessage lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas EnableVisualStyleValidation tidak didukung

Sakelar Switch.System.Windows.Forms.EnableVisualStyleValidation kompatibilitas tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dalam .NET Framework, Switch.System.Windows.Forms.EnableVisualStyleValidation sakelar kompatibilitas memungkinkan aplikasi untuk menolak validasi gaya visual yang disediakan dalam bentuk numerik.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.EnableVisualStyleValidation lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Sakelar kompatibilitas UseLegacyContextMenuStripSourceControlValue tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibilitas, yang diperkenalkan di .NET Framework 4.7.2, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.7.2, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue sakelar kompatibilitas memungkinkan pengembang untuk menolak perilaku ContextMenuStrip.SourceControl baru properti, yang sekarang mengembalikan referensi ke kontrol sumber. Perilaku properti sebelumnya adalah mengembalikan null. Untuk informasi selengkapnya, lihat <elemen AppContextSwitchOverrides>.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh


Sakelar kompatibilitas UseLegacyImages tidak didukung

Sakelar Switch.System.Windows.Forms.UseLegacyImages kompatibilitas, yang diperkenalkan di .NET Framework 4.8, tidak didukung di Formulir Windows pada .NET Core atau .NET 5.0 dan yang lebih baru.

Deskripsi perubahan

Dimulai dengan .NET Framework 4.8, Switch.System.Windows.Forms.UseLegacyImages sakelar kompatibilitas mengatasi kemungkinan masalah penskalaan gambar dalam skenario ClickOnce di lingkungan DPI tinggi. Ketika diatur ke true, sakelar memungkinkan pengguna untuk memulihkan penskalakan gambar warisan pada tampilan DPI tinggi yang skalanya diatur ke lebih besar dari 100%. Untuk informasi selengkapnya, lihat Catatan Rilis .NET Framework 4.8 di GitHub.

Di .NET Core dan .NET 5.0 dan yang Switch.System.Windows.Forms.UseLegacyImages lebih baru, sakelar tidak didukung.

Versi yang diperkenalkan

3.0

Hapus sakelar. Sakelar tidak didukung, dan tidak ada fungsionalitas alternatif yang tersedia.

Kategori

Formulir Windows

API yang Terpengaruh

  • Tidak

Templat Tentang dan SplashScreen rusak

File About.vb dan SplashScreen.vb yang dihasilkan oleh Visual Studio berisi referensi ke jenis di My namespace layanan yang tidak tersedia .NET Core 3.0 dan 3.1.

Versi yang diperkenalkan

3.0

Deskripsi perubahan

.NET Core 3.0 dan 3.1 tidak berisi dukungan Visual Basic My penuh. Templat formulir Tentang dan SplashScreen di Visual Studio untuk Visual Basic Formulir Windows properti referensi aplikasi dalam My.Application.Info jenis yang tidak tersedia.

Dukungan Visual Basic My ditingkatkan di .NET 5, tingkatkan proyek Anda ke .NET 5 atau yang lebih baru.

-atau-

Perbaiki kesalahan pengkompilasi di jenis Tentang dan SplashScreen di aplikasi Anda. System.Reflection.Assembly Gunakan kelas untuk mendapatkan informasi yang disediakan oleh jenis .My.Application.Info Port lurus dari kedua bentuk tersedia di sini.

Tip

Ini adalah kode sampel dan tidak optimal. Daftar atribut harus di-cache untuk mengurangi waktu pemuatan formulir.

Tentang

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

Kategori

Formulir Windows Visual Basic

API yang Terpengaruh

Tidak


Jenis di namespace Microsoft.VisualBasic.ApplicationServices tidak tersedia

Tipe di Microsoft.VisualBasic.ApplicationServices namespace tidak tersedia.

Versi yang diperkenalkan

.NET Core 3.0

Deskripsi perubahan

Jenis di Microsoft.VisualBasic.ApplicationServices namespace tersedia di .NET Framework. Mereka tidak tersedia di .NET Core 3.0 - 3.1.

Jenis dihapus untuk menghindari dependensi perakitan yang tidak perlu atau melanggar perubahan dalam rilis berikutnya.

Namespace ini ditambahkan di .NET 5, tingkatkan proyek Anda ke .NET 5 atau yang lebih baru.

-atau-

Jika kode Anda bergantung pada penggunaan jenis Microsoft.VisualBasic.ApplicationServices dan anggotanya, Anda mungkin dapat menggunakan jenis atau anggota yang sesuai di pustaka kelas .NET. Misalnya, beberapa System.Environment dan System.Security.Principal.WindowsIdentity anggota menyediakan fungsionalitas yang setara dengan properti Microsoft.VisualBasic.ApplicationServices.User kelas.

Kategori

Visual Basic

API yang Terpengaruh


Jenis di namespace Microsoft.VisualBasic.Devices tidak tersedia

Tipe di Microsoft.VisualBasic.Devices namespace tidak tersedia.

Versi yang diperkenalkan

.NET Core 3.0

Deskripsi perubahan

Jenis di Microsoft.VisualBasic.Devices namespace tersedia di .NET Framework. Mereka tidak tersedia di .NET Core 3.0 - 3.1.

Jenis dihapus untuk menghindari dependensi perakitan yang tidak perlu atau melanggar perubahan dalam rilis berikutnya.

Namespace ini ditambahkan di .NET 5, tingkatkan proyek Anda ke .NET 5 atau yang lebih baru.

-atau-

Jika kode Anda bergantung pada penggunaan jenis Microsoft.VisualBasic.Devices dan anggotanya, Anda mungkin dapat menggunakan jenis atau anggota yang sesuai di pustaka kelas .NET. Misalnya, fungsionalitas yang setara dengan Microsoft.VisualBasic.Devices.Clock kelas disediakan oleh System.DateTime jenis dan System.Environment , dan fungsionalitas yang setara dengan Microsoft.VisualBasic.Devices.Ports kelas disediakan oleh jenis di System.IO.Ports namespace layanan.

Kategori

Visual Basic

API yang Terpengaruh


Jenis di namespace Microsoft.VisualBasic.MyServices tidak tersedia

Tipe di Microsoft.VisualBasic.MyServices namespace tidak tersedia.

Versi yang diperkenalkan

.NET Core 3.0

Deskripsi perubahan

Jenis di Microsoft.VisualBasic.MyServices namespace tersedia di .NET Framework. Mereka tidak tersedia di .NET Core 3.0 - 3.1.

Jenis dihapus untuk menghindari dependensi perakitan yang tidak perlu atau melanggar perubahan dalam rilis berikutnya.

Namespace ini ditambahkan di .NET 5, tingkatkan proyek Anda ke .NET 5 atau yang lebih baru.

-atau-

Jika kode Anda bergantung pada penggunaan jenis Microsoft.VisualBasic.MyServices dan anggotanya, ada jenis dan anggota yang sesuai di pustaka kelas .NET. Berikut ini adalah pemetaan jenis Microsoft.VisualBasic.MyServices ke jenis pustaka kelas .NET yang setara:

Jenis Microsoft.VisualBasic.MyServices Jenis pustaka kelas .NET
ClipboardProxy System.Windows.Clipboarduntuk aplikasi WPF, System.Windows.Forms.Clipboard untuk aplikasi Formulir Windows
FileSystemProxy Jenis di System.IO namespace layanan
RegistryProxy Jenis terkait registri di Microsoft.Win32 namespace layanan
SpecialDirectoriesProxy Environment.GetFolderPath

Kategori

Visual Basic

API yang Terpengaruh


Lihat juga