Bagikan melalui


Perubahan penting 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 mungkin memengaruhi Anda. Perubahan besar dikelompokkan menurut kategori, dan dalam masing-masing kategori tersebut diurutkan berdasarkan versi .NET Core saat perubahan diperkenalkan.

Nota

Artikel ini bukan daftar lengkap perubahan mencolok antara .NET Framework dan .NET Core. Perubahan signifikan yang paling penting akan ditambahkan di sini saat kami mengetahuinya.

Pustaka .NET inti

.NET 8

API IDispatchImplAttribute telah dihapus

.NET Core 2.1

Perubahan nilai default UseShellExecute

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

Ubah deskripsi

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 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 berikut pada System.Diagnostics.ProcessStartInfo hanya berfungsi ketika ProcessStartInfo.UseShellExecutetrue:

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 ProcessStartInfo.UseShellExecute menjadi false. Anda dapat ikut serta ke jalur yang lebih lambat jika Anda membutuhkannya.

Versi diperkenalkan

2.1

Nota

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 true pada objek ProcessStartInfo.

Kategori

Pustaka .NET inti

API yang terpengaruh


.NET Core 1.0

UnauthorizedAccessException dilemparkan oleh FileSystemInfo.Attributes

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

Ubah deskripsi

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

Versi yang diperkenalkan

1.0

Ubah pernyataan catch apa pun untuk menangkap UnauthorizedAccessException, baik sebagai pengganti atau tambahan dari ArgumentException, seperlunya.

Kategori

Pustaka .NET inti

API yang terpengaruh


Penanganan pengecualian pada status yang rusak tidak didukung

Menangani pengecualian untuk kondisi proses yang rusak tidak didukung di .NET Core.

Ubah deskripsi

Sebelumnya, pengecualian status proses yang rusak dapat ditangkap dan ditangani oleh penangan 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 diperkenalkan

1.0

Hindari kebutuhan untuk menangani pengecualian status proses yang rusak dengan terlebih dahulu mengatasi situasi yang menyebabkannya. Jika benar-benar diperlukan untuk menangani pengecualian status proses yang rusak, tulis handler pengecualian dalam kode C atau C++.

Kategori

Pustaka Utama .NET

API yang terpengaruh


Properti UriBuilder tidak lagi menambahkan karakter utama

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

Ubah deskripsi

Dalam .NET Framework, properti UriBuilder.Fragment dan UriBuilder.Query selalu menambahkan karakter # atau ?, ke nilai yang disimpan. Perilaku ini dapat mengakibatkan beberapa karakter # atau ? 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 perlu menghapus awalan # atau ? setiap kali melakukan penambahan.

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 ????one=1&two=2&three=3&four=4.
  • Di .NET Core, outputnya ?one=1&two=2&three=3&four=4.

Golongan

Pustaka .NET inti utama

API yang terpengaruh


Process.StartInfo melempar InvalidOperationException untuk proses yang tidak Anda mulai

Membaca properti Process.StartInfo untuk proses yang tidak dimulai oleh kode Anda akan menghasilkan InvalidOperationException.

Ubah deskripsi

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

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

Versi yang diperkenalkan

1.0

Jangan akses properti Process.StartInfo untuk proses yang tidak dijalankan oleh 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 diperhatikan

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

Ubah deskripsi

Dalam .NET Framework, parameter silent metode SignedCms.ComputeSignature(CmsSigner, Boolean) diabaikan, dan perintah PIN selalu ditampilkan jika diperlukan oleh penyedia. Di .NET Core, parameter silent 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 manifest sumber daya

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

Versi telah diperkenalkan

3.0

Ubah deskripsi

Sebelum .NET Core 3.0, jika tidak ada metadata LogicalName, ManifestResourceName, atau DependentUpon ditentukan untuk item EmbeddedResource dalam file proyek, MSBuild menghasilkan nama file manifes dalam pola <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Jika RootNamespace tidak ditentukan dalam file proyek, secara otomatis diatur menjadi nama proyek. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx di direktori proyek akar 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 dan nama kelas diekstrak dari tipe pertama yang terletak pada file sumber yang sama. Misalnya, nama manifes yang dihasilkan untuk file sumber daya bernama Form1.resx yang dikolokasikan 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).

Nota

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

Perubahan besar ini diperkenalkan dengan menambahkan properti EmbeddedResourceUseDependentUponConvention ke proyek .NET Core. Secara default, file sumber daya tidak secara eksplisit tercantum dalam file proyek .NET Core, sehingga tidak memiliki metadata untuk menentukan cara menamai file .resources yang dihasilkan. Ketika EmbeddedResourceUseDependentUponConvention diatur ke true, yang merupakan default, MSBuild mencari file sumber yang ditempatkan bersamaan dan mengekstrak namespace 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

N/A


Jaringan

.NET Core 2.0

WebClient.CancelAsync tidak selalu membatalkan dengan segera

Mulai dari .NET Core 2.0, memanggil fungsi WebClient.CancelAsync() tidak segera membatalkan permintaan jika respons telah mulai diproses.

Ubah deskripsi

Sebelumnya, memanggil WebClient.CancelAsync() segera membatalkan permintaan. Dimulai pada .NET Core 2.0, memanggil WebClient.CancelAsync() akan segera membatalkan permintaan hanya jika respons belum mulai memproses. Jika pengambilan respons telah dimulai, permintaan dibatalkan hanya setelah respons lengkap telah dibaca.

Perubahan ini diterapkan karena API WebClient tidak digunakan lagi untuk mendukung HttpClient.

Versi yang diperkenalkan

2.0

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

Kategori

Jaringan

API yang terpengaruh


Windows Forms

Dukungan Windows Forms ditambahkan ke .NET Core di versi 3.0. Jika Anda memigrasikan aplikasi Windows Forms dari .NET Framework ke .NET Core, perubahan signifikan yang tercantum di sini mungkin memengaruhi aplikasi Anda.

.NET Core 3.1

Kontrol yang dihapus

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

Ubah deskripsi

Dimulai dengan .NET Core 3.1, berbagai kontrol Windows Forms 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 ini:

Kontrol yang dihapus (API) Penggantian yang direkomendasikan API terkait yang dihapus
Menu Konteks ContextMenuStrip
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Menu Utama MenuStrip
Menu ToolStripDropDown, ToolStripDropDownMenu KoleksiMenuItem
Item Menu ToolStripMenuItem
Bilah Alat ToolStrip Tampilan Toolbar
Tombol Bilah Alat ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Windows Forms

API yang terpengaruh


Peristiwa CellFormatting tidak dipicu jika tooltip ditampilkan

DataGridView sekarang memperlihatkan teks sel dan tooltip kesalahan ketika di-hover menggunakan mouse dan saat dipilih melalui keyboard. Jika tooltip ditampilkan, peristiwa DataGridView.CellFormatting tidak dipicu.

Ubah deskripsi

Sebelum .NET Core 3.1, DataGridView yang memiliki properti ShowCellToolTips diatur ke true akan memperlihatkan tooltip untuk teks dan kesalahan pada sel ketika kursor diarahkan ke sel tersebut. Tooltip tidak muncul ketika sel dipilih menggunakan keyboard (misalnya, dengan menggunakan tombol Tab, pintasan keyboard, atau navigasi panah). Jika pengguna mengedit sel, dan kemudian, saat DataGridView masih dalam mode edit, menggerakkan penunjuk mouse ke sel yang tidak memiliki properti ToolTipText, peristiwa CellFormatting diaktifkan untuk memformat teks untuk ditampilkan dalam sel.

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

Diperkenalkan versi

3.1

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

Kategori

Windows Forms

API yang terpengaruh

Tidak


.NET Core 3.0

Font kontrol default diubah menjadi Segoe UI 9 pt

Ubah deskripsi

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

Font kontrol default di .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:

Font kontrol default di .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 untuk satu formulir, atur font defaultnya ke Microsoft Sans Serif 8.25 pt. Misalnya:

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

Atau, Anda dapat mengubah font default untuk seluruh aplikasi dengan salah satu cara berikut:

  • Dengan mengatur properti MSBuild ApplicationDefaultFont ke "Microsoft Sans Serif, 8.25pt". Ini adalah teknik yang disukai karena memungkinkan Visual Studio menggunakan pengaturan baru di perancang.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Dengan memanggil 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());
        }
    }
    

Kategori

  • Windows Forms

API yang terpengaruh

Tidak.


Modernisasi pada FolderBrowserDialog

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

Ubah deskripsi

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

FolderBrowserDialogControl di .NET Framework

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

FolderBrowserDialogControl di .NET Core

Versi yang diperkenalkan

3.0

Dialog akan dimutakhirkan secara otomatis.

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

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

Kategori

Windows Forms

API yang terpengaruh


SerializableAttribute dihapus dari beberapa jenis Windows Forms

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

Ubah deskripsi

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

Secara historis, mekanisme serialisasi ini memiliki masalah pemeliharaan dan keamanan yang serius. Mempertahankan SerializableAttribute pada tipe berarti tipe tersebut harus diuji untuk perubahan serialisasi versi-ke-versi dan kemungkinan perubahan serialisasi antarkerangka 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

Windows Forms

API yang terpengaruh

  • Tidak

Pengaturan kompatibilitas AllowUpdateChildControlIndexForTabControls tidak didukung

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

Ubah deskripsi

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

Pada .NET Core dan .NET 5.0 ke atas, sakelar Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls tidak didukung.

Versi yang diperkenalkan

3.0

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

Kategori

Windows Forms

API yang terpengaruh

  • Tidak

Pengaturan kompatibilitas DomainUpDown.UseLegacyScrolling tidak didukung

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

Ubah deskripsi

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

Di .NET Core dan .NET 5.0 versi selanjutnya, sakelar Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling tidak didukung.

Versi diperkenalkan

3.0

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

Kategori

Windows Forms

API yang terpengaruh


Pengalih pengaturan kompatibilitas DoNotLoadLatestRichEditControl tidak didukung

Pengaturan kompatibilitas Switch.System.Windows.Forms.UseLegacyImages, yang diperkenalkan dalam .NET Framework 4.7.1, tidak didukung di Windows Forms pada .NET Core atau .NET 5.0 dan seterusnya.

Ubah deskripsi

Dalam .NET Framework 4.6.2 dan versi sebelumnya, RichTextBox menginstansiasi kontrol Win32 RichEdit v3.0, dan untuk aplikasi yang menargetkan .NET Framework 4.7.1, kontrol RichTextBox menginstansiasi RichEdit v4.1 (dalam msftedit.dll). Sakelar kompatibilitas Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 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 RichTextBox yang didukung.

Versi diperkenalkan

3.0

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

Kategori

Formulir Windows

API yang terpengaruh


Pengalih kompatibilitas DoNotSupportSelectAllShortcutInMultilineTextBox tidak didukung

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

Ubah deskripsi

Dimulai dengan .NET Framework 4.6.1, memilih tombol pintasan Ctrl + A dalam kontrol TextBox memilih semua teks. Di .NET Framework 4.6 dan versi sebelumnya, memilih kunci pintasan Ctrl + A gagal memilih semua teks jika Textbox.ShortcutsEnabled dan properti TextBox.Multiline keduanya diatur ke true. Sakelar kompatibilitas Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox diperkenalkan di .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 fungsi alternatif yang tersedia.

Kategori

Formulir Windows

API yang terpengaruh

  • Tidak

Sakelar kompatibilitas "DontSupportReentrantFilterMessage" tidak didukung

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

Ubah deskripsi

Dimulai dengan .NET Framework 4.6.1, saklar kompatibilitas Switch.System.Windows.Forms.DontSupportReentrantFilterMessage mengatasi pengecualian IndexOutOfRangeException yang mungkin terjadi saat pesan Application.FilterMessage dipanggil dengan implementasi IMessageFilter.PreFilterMessage kustom. Untuk informasi selengkapnya, lihat Mitigasi: Implementasi Kustom IMessageFilter.PreFilterMessage.

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

Versi yang diperkenalkan

3.0

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

Kategori

Windows Forms

API yang terpengaruh


Pengalih kompatibilitas EnableVisualStyleValidation tidak berlaku

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

Ubah deskripsi

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

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

Versi diperkenalkan

3.0

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

Kategori

Windows Forms

API yang terpengaruh

  • Tidak

Pengaturan kesesuaian opsi UseLegacyContextMenuStripSourceControlValue tidak didukung

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

Ubah deskripsi

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

Pada .NET Core serta .NET 5.0 dan versi-versi yang lebih baru, sakelar Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue tidak didukung.

Versi diperkenalkan

3.0

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

Kategori

Windows Forms

API yang terpengaruh


Sakelar kompatibilitas UseLegacyImages tidak didukung

Pengalih kompatibilitas Switch.System.Windows.Forms.UseLegacyImages, yang diperkenalkan di .NET Framework 4.8, tidak didukung di Windows Forms pada platform .NET Core, .NET 5.0, atau versi yang lebih baru.

Ubah deskripsi

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

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

Diperkenalkan versi

3.0

Hapus sakelar. Switch tidak didukung, dan tidak ada opsi lain yang tersedia.

Kategori

Windows Forms

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 namespace My yang tidak tersedia .NET Core 3.0 dan 3.1.

Versi yang diperkenalkan

3.0

Ubah deskripsi

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

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

-atau-

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

(assuming the context is advice) Tips

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

Windows Forms Visual Basic

API yang terpengaruh

Tidak


Jenis di namespace Microsoft.VisualBasic.ApplicationServices tidak tersedia

Tipe di namespace Microsoft.VisualBasic.ApplicationServices tidak tersedia.

Versi yang diperkenalkan

.NET Core 3.0

Ubah deskripsi

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

Tipe dihapus untuk menghindari ketergantungan perakitan yang tidak perlu atau perubahan besar 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 anggota System.Environment dan System.Security.Principal.WindowsIdentity menyediakan fungsionalitas yang setara dengan properti kelas Microsoft.VisualBasic.ApplicationServices.User.

Kategori

Visual Basic

API yang terpengaruh


Jenis di namespace Microsoft.VisualBasic.Devices tidak tersedia

Tipe di namespace Microsoft.VisualBasic.Devices tidak tersedia.

Versi yang diperkenalkan

.NET Core 3.0

Ubah deskripsi

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

Jenis dihapus untuk menghindari tergantung pada perakitan yang tidak perlu atau perubahan yang merusak 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 kelas Microsoft.VisualBasic.Devices.Clock disediakan oleh jenis System.DateTime dan System.Environment, dan fungsionalitas yang setara dengan kelas Microsoft.VisualBasic.Devices.Ports disediakan oleh jenis di namespace System.IO.Ports.

Kategori

Visual Basic

API yang terpengaruh


Jenis di namespace Microsoft.VisualBasic.MyServices tidak tersedia

Tipe di namespace Microsoft.VisualBasic.MyServices tidak tersedia.

Versi diperkenalkan

.NET Core 3.0

Ubah deskripsi

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

Tipe dihapus untuk menghindari dependensi perakitan yang tidak perlu atau perubahan yang merusak kompatibilitas 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 tipe Microsoft.VisualBasic.MyServices ke tipe pustaka kelas .NET yang setara:

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

Kategori

Visual Basic

API yang terpengaruh


Lihat juga