Aracılığıyla paylaş


.NET Framework'ten .NET Core'a geçiş için hataya neden olan değişiklikler

Uygulamanızı .NET Framework'ten .NET Core 1.0 ile 3.1 sürümleri arasında geçiş yapıyorsanız, bu makalede listelenen olası uyumsuzluklar sizi etkileyebilir. Önemli değişiklikler kategoriye göre ve kategori içinde, tanıtıldıkları .NET Core sürümüne göre gruplandırılır.

Not

Bu makale, .NET Framework ile .NET Core arasındaki uyumsuzluk yaratan değişikliklerin tam listesi değildir. En önemli kırılma değişiklikleri, fark ettiğimizde buraya eklenir.

Çekirdek .NET kitaplıkları

.NET 8

IDispatchImplAttribute API kaldırıldı

.NET Core 2.1

UseShellExecute varsayılan değerinde değişiklik

ProcessStartInfo.UseShellExecute.NET Core'da varsayılan false değerine sahiptir. .NET Framework'te varsayılan değeri true.

Açıklamayı değiştir

Process.Start, bir uygulamayı doğrudan, örneğin Paint'i başlatan Process.Start("mspaint.exe") gibi bir kodla başlatmanıza olanak tanır. ayrıca, ProcessStartInfo.UseShellExecutetrueolarak ayarlanırsa dolaylı olarak ilişkili bir uygulamayı başlatmanızı sağlar. .NET Framework'te, ProcessStartInfo.UseShellExecute için varsayılan değer truedeğeridir. Bu, .txt dosyaları bu düzenleyiciyle ilişkilendirdiyseniz Process.Start("mytextfile.txt") gibi kodun Not Defteri'ni başlatacağı anlamına gelir. .NET Framework'te dolaylı olarak bir uygulamanın başlatılmasını önlemek için, ProcessStartInfo.UseShellExecute açıkça falseolarak ayarlamanız gerekir. .NET Core'da, ProcessStartInfo.UseShellExecute için varsayılan değer falsedeğeridir. Bu, Process.Startçağırdığınızda varsayılan olarak ilişkili uygulamaların başlatılmadığı anlamına gelir.

System.Diagnostics.ProcessStartInfo'de aşağıdaki özellikler yalnızca ProcessStartInfo.UseShellExecutetrueolduğunda işlevseldir:

Bu değişiklik performans nedenleriyle .NET Core'da kullanıma sunulmuştur. Genellikle Process.Start bir uygulamayı doğrudan başlatmak için kullanılır. Bir uygulamayı doğrudan başlatırken Windows kabuğunu kullanmaya ve bununla ilişkili performans maliyetine katlanmaya gerek yoktur. Bu varsayılan durumu daha hızlı hale getirmek için .NET Core, ProcessStartInfo.UseShellExecute varsayılan değerini falseolarak değiştirir. Gerekirse daha yavaş yolu seçebilirsiniz.

Sürüm kullanıma sunulmuştur

2.1

Not

.NET Core'un önceki sürümlerinde Windows için UseShellExecute uygulanmamıştı.

Uygulamanız eski davranışa bağlıysa, ProcessStartInfo nesnesinde true olacak şekilde UseShellExecute'i ayarlayarak Process.Start(ProcessStartInfo) çağrısını yapın.

Kategori

Çekirdek .NET kitaplıkları

Etkilenen API'ler


.NET Core 1.0

FileSystemInfo.Attributes tarafından unauthorizedAccessException oluşturuldu

.NET Core'da, çağıran bir dosya özniteliği değeri ayarlamaya çalıştığında ancak yazma izni olmadığında bir UnauthorizedAccessException hatası atılır.

Açıklamayı değiştir

.NET Framework'te, çağırıcı yazma izni olmadığı halde FileSystemInfo.Attributes ile bir dosya özniteliği değeri ayarlamaya çalıştığında bir ArgumentException kaldırılır. .NET Core'da bunun yerine bir UnauthorizedAccessException fırlatılır. (.NET Core'da, çağıran geçersiz bir dosya özniteliği ayarlamayı denerse bir ArgumentException yine de oluşturulur.)

Sürüm kullanıma sunulmuştur

1.0

Herhangi bir catch ifadesini, gerektiği gibi, ArgumentExceptionyerine veya buna ek olarak, bir UnauthorizedAccessException yakalayacak şekilde değiştirin.

Kategori

Çekirdek .NET kitaplıkları

Etkilenen API'ler


Bozuk durum özel durumlarını işleme desteklenmiyor

.NET Core'da bozulmuş işlem durumu özel durumlarını işleme desteklenmez.

Açıklamayı değiştir

Daha önce, bozulmuş süreç durumu istisnaları yönetilen kod istisna işleyicileri tarafından yakalanabiliyor ve işlenebilirlerdi; örneğin, C# dilinde bir try-catch deyimi kullanarak.

.NET Core 1.0'dan başlayarak, bozuk işlem durumu özel durumları yönetilen kod tarafından işlenemez. Ortak dil çalışma zamanı, yönetilen koda bozulmuş işlem durumu istisnaları iletmez.

Sürüm kullanıma sunulmuştur

1.0

Bozuk işlem durumu istisnalarını ele alma gereğini ortadan kaldırmak için bunlara sebep olan durumları ele alın. Bozuk işlem durumu özel durumlarını işlemek kesinlikle gerekliyse, özel durum işleyicisini C veya C++ koduna yazın.

Kategori

Çekirdek .NET kitaplıkları

Etkilenen API'ler


UriBuilder özellikleri artık baştaki karakterleri eklemiyor.

UriBuilder.Fragment artık baştaki bir # karakterin başına eklenmez ve UriBuilder.Query zaten mevcut olduğunda öndeki bir ? karakterin başına eklenmez.

Açıklamayı değiştir

.NET Framework'te UriBuilder.Fragment ve UriBuilder.Query özellikleri her zaman depolanmakta olan değere sırasıyla bir # veya ? karakteri ekler. Dize hali hazırda bu baştaki karakterlerden birini içeriyorsa, bu davranış depolanan değerde birden çok # veya ? karakterine neden olabilir. Örneğin, UriBuilder.Fragment değeri ##mainolabilir.

.NET Core 1.0'dan itibaren, bu özellikler dizenin başında zaten varsa # veya ? karakterlerini depolanan değere artık eklemiyor.

Sürüm kullanıma sunulmuştur

1.0

Özellik değerlerini ayarlarken artık bu baştaki karakterlerden herhangi birini açıkça kaldırmanız gerekmez. Bu, özellikle değerleri eklerken kullanışlıdır çünkü artık her eklediğinizde baştaki # veya ? kaldırmanız gerekmez.

Örneğin, aşağıdaki kod parçacığı .NET Framework ile .NET Core arasındaki davranış farkını gösterir.

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'te çıkış ????one=1&two=2&three=3&four=4olarak.
  • .NET Core'da çıktı ?one=1&two=2&three=3&four=4.

Kategori

Çekirdek .NET kitaplıkları

Etkilenen API'ler


Process.StartInfo, başlatmadığınız işlemler için InvalidOperationException oluşturur

Kodunuzun başlatmadığı işlemler için Process.StartInfo özelliğinin okunması bir InvalidOperationExceptionoluşturur.

Açıklamayı değiştir

.NET Framework'te, kodunuzun başlatmamış olduğu işlemler için Process.StartInfo özelliğine erişmek, sahte bir ProcessStartInfo nesnesi döndürür. Sahte nesne, EnvironmentVariablesdışındaki tüm özellikleri için varsayılan değerler içerir.

.NET Core 1.0'dan başlayarak, başlatmadığınız bir işlemin Process.StartInfo özelliğini okursanız (yani, Process.Startçağırarak), bir InvalidOperationException hatası fırlatılır.

Sürüm kullanıma sunulmuştur

1.0

Kodunuzun başlamadığı işlemler için Process.StartInfo özelliğine erişemezsiniz. Örneğin, Process.GetProcessestarafından döndürülen işlemler için bu özelliği okumayın.

Kategori

Çekirdek .NET kitaplıkları

Etkilenen API'ler


Şifreleme

.NET Core 2.1

SignedCms.ComputeSignature Boolean parametresi dikkate alındı

.NET Core'da SignedCms.ComputeSignature(CmsSigner, Boolean) yönteminin Boole silent parametresine uyulur. Bu parametre trueolarak ayarlandıysa PIN istemi gösterilmez.

Açıklamayı değiştir

.NET Framework'te, SignedCms.ComputeSignature(CmsSigner, Boolean) yönteminin silent parametresi göz ardı edilir ve sağlayıcı tarafından gerekirse her zaman bir PIN istemi gösterilir. .NET Core'da silent parametresine uyulur ve trueolarak ayarlanırsa, sağlayıcı tarafından gerekli olsa bile hiçbir zaman bir PIN istemi gösterilmez.

.NET Core'a, sürüm 2.1'de CMS/PKCS #7 mesajlarına destek eklendi.

Sürüm kullanıma sunulmuştur

2.1

Gerekirse bir PIN isteminin görüntülendiğinden emin olmak için masaüstü uygulamalarının SignedCms.ComputeSignature(CmsSigner, Boolean) çağırması ve Boole parametresini falseolarak ayarlaması gerekir. Sonuçta elde edilen davranış, sessiz bağlamın orada devre dışı bırakılıp bırakılmadığına bakılmaksızın .NET Framework ile aynıdır.

Kategori

Şifreleme

Etkilenen API'ler


MSBuild

.NET Core 3.0

Kaynak bildirim dosyası adı değişikliği

.NET Core 3.0'dan başlayarak, varsayılan durumda MSBuild kaynak dosyaları için farklı bir bildirim dosyası adı oluşturur.

Sürüm kullanıma sunulmuştur

3.0

Açıklamayı değiştir

.NET Core 3.0'den önce, proje dosyasındaki bir EmbeddedResource öğesi için LogicalName, ManifestResourceNameveya DependentUpon meta verileri belirtilmemişse, MSBuild, <RootNamespace>.<ResourceFilePathFromProjectRoot>.resourcesdeseninde bir manifest dosyası adı oluşturuyordu. proje dosyasında RootNamespace tanımlanmamışsa, varsayılan olarak proje adı olur. Örneğin, kök proje dizininde Form1.resx adlı bir kaynak dosyası için oluşturulan bildirim adı myProject.Form1.resources.

.NET Core 3.0'dan başlayarak, bir kaynak dosyası aynı ada sahip bir kaynak dosya ile (örneğin, Form1.resx ve Form1.cs) birlikte yerleştirildiğinde, MSBuild, <Namespace>.<ClassName>.resourcesdeseninde bildirim dosyası adını oluşturmak için kaynak dosyadaki tür bilgilerini kullanır. Ad alanı ve sınıf adı, aynı konumda bulunan kaynak dosyasındaki ilk türden ayıklanır. Örneğin, Form1.cs adlı kaynak dosyayla aynı yerde bulunan Form1.resx adlı kaynak dosyası için oluşturulan bildirim adı MyNamespace.Form1.resources'dir. Dikkate almak gereken önemli nokta, dosya adının ilk bölümünün .NET Core'un önceki sürümlerinden (MyProjectyerine MyNamespace) farklı olmasıdır.

Not

Proje dosyasındaki bir EmbeddedResource öğesinde belirtilen LogicalName, ManifestResourceNameveya DependentUpon meta veriniz varsa, bu değişiklik bu kaynak dosyasını etkilemez.

Bu önemli değişiklik, .NET Core projelerine EmbeddedResourceUseDependentUponConvention özelliği eklenmesi ile tanıtıldı. Varsayılan olarak, kaynak dosyaları açıkça bir .NET Core proje dosyasında listelenmez, bu nedenle oluşturulan .resources dosyasının nasıl adlandırılacağını belirtmek için DependentUpon meta verileri yoktur. EmbeddedResourceUseDependentUponConvention varsayılan olan trueolarak ayarlandığında, MSBuild aynı konumda bulunan bir kaynak dosyayı arar ve bu dosyadan bir namespace ve sınıf adı çıkarır. EmbeddedResourceUseDependentUponConvention falseolarak ayarlarsanız, MSBuild bildirim adını önceki davranışa göre oluşturur ve bu da RootNamespace ve göreli dosya yolunu birleştirir.

Çoğu durumda, geliştirici tarafından herhangi bir eylem gerekmez ve uygulamanız çalışmaya devam etmelidir. Ancak, bu değişiklik uygulamanızı bozarsa şunları yapabilirsiniz:

  • Kodunuzu yeni bildirim adını bekleyecek şekilde değiştirin.

  • Proje dosyanızda EmbeddedResourceUseDependentUponConventionfalse olarak ayarlayarak yeni adlandırma kuralından vazgeçebilirsiniz.

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

Kategori

MSBuild

Etkilenen API'ler

Geçerli Değil


.NET Core 2.0

WebClient.CancelAsync her zaman hemen iptal etmez

.NET Core 2.0'dan itibaren, yanıt getirilmeye başlamışsa WebClient.CancelAsync() çağrısı yapıldığında istek hemen iptal edilmez.

Açıklamayı değiştir

Daha önce WebClient.CancelAsync()'ı aramak isteği hemen iptal ediyordu. .NET Core 2.0'dan başlayarak WebClient.CancelAsync() çağrısı, yalnızca yanıt getirilmeye başlamadıysa isteği hemen iptal eder. Yanıt getirilmeye başladıysa, istek ancak tam bir yanıt okunduktan sonra iptal edilir.

bu değişiklik, WebClient API'sinin HttpClientlehine kullanım dışı bırakıldığı için uygulandı.

Sürüm kullanıma sunulmuştur

2.0

kullanım dışı bırakılan System.Net.WebClientyerine System.Net.Http.HttpClient sınıfını kullanın.

Kategori

Etkilenen API'ler


Windows Forms

Windows Forms desteği sürüm 3.0'da .NET Core'a eklendi. Bir Windows Forms uygulamasını .NET Framework'ten .NET Core'a geçiriyorsanız, burada listelenen önemli değişiklikler uygulamanızı etkileyebilir.

.NET Core 3.1

Denetimler kaldırıldı

.NET Core 3.1'den başlayarak, bazı Windows Forms denetimleri artık kullanılamaz.

Açıklamayı değiştir

.NET Core 3.1'den başlayarak, çeşitli Windows Forms denetimleri artık kullanılamaz. .NET Framework 2.0'da daha iyi tasarıma ve desteğe sahip değiştirme denetimleri kullanıma sunulmuştur. Kullanım dışı bırakılan denetimler daha önce tasarımcı araç kutularından kaldırılmıştı ancak hala kullanılabilir durumdaydı.

Aşağıdaki türler artık kullanılamaz:

Sürüm kullanıma sunulmuştur

3.1

Her kaldırılan denetim için önerilen bir değiştirme denetimi vardır. Aşağıdaki tabloya bakın:

Kontrol kaldırıldı (API) Önerilen değiştirme Kaldırılan ilişkili API'ler
Bağlam Menüsü ContextMenuStrip
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Ana Menü MenuStrip
Menü ToolStripDropDown, ToolStripDropDownMenu Menü Öğesi Koleksiyonu
Menü Öğesi ToolStripMenuItem (Araç Çubuğu Menü Öğesi)
Araç çubuğu ToolStrip Araç Çubuğu Görünümü
Araç Çubuğu Düğmesi Araç Çubuğu Düğmesi ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Windows Forms

Etkilenen API'ler


Araç ipucu gösteriliyorsa CellFormatting olayı tetiklenmiyor

DataGridView artık, fareyle üzerine gelindiğinde ve klavye aracılığıyla seçildiğinde, hücrenin metin ve hata araç ipuçlarını gösterir. Bir araç ipucu gösteriliyorsa, DataGridView.CellFormatting olayı tetiklenmez.

Açıklamayı değiştir

.NET Core 3.1'in öncesinde, ShowCellToolTips özelliği true olarak ayarlanmış bir DataGridView, hücreye fareyle gelindiğinde hücrenin metni ve hatalarına dair bir araç ipucu gösterirdi. Klavye aracılığıyla bir hücre seçildiğinde araç ipuçları gösterilmedi (örneğin, Sekme tuşu, kısayol tuşları veya ok gezintisi kullanılarak). Kullanıcı bir hücreyi düzenlemişse ve DataGridView hala düzenleme modundayken, ToolTipText özelliği ayarlanmamış bir hücrenin üzerine gelindiyse, hücrenin metnini hücrede görüntülenmek üzere biçimlendirmek için bir CellFormatting olayı tetiklendi.

.NET Core 3.1'den başlayarak erişilebilirlik standartlarını karşılamak için, ShowCellToolTips özelliği true olarak ayarlanmış bir DataGridView, yalnızca hücrenin üzerine gelindiğinde değil, aynı zamanda klavye aracılığıyla seçildiğinde de hücre metni ve hataları için araç ipuçlarını gösterir. Bu değişikliğin bir sonucu olarak, DataGridView düzenleme modundayken ToolTipText özelliği ayarlanmamış hücreler üzerine gelindiğinde CellFormatting olayı tetiklenmez. Vurgulanan hücrenin içeriği hücrede görüntülenmek yerine araç ipucu olarak gösterildiğinden olay tetiklenmez.

Sürüm kullanıma sunulmuştur

3.1

DataGridView düzenleme modundayken CellFormatting olaya bağlı olan tüm kodları yeniden düzenleyin.

Kategori

Windows Forms

Etkilenen API'ler

Hiç kimse


.NET Core 3.0

Varsayılan denetim yazı tipi Segoe UI 9 pt olarak değiştirildi

Açıklamayı değiştir

.NET Framework'te Control.DefaultFont özelliği Microsoft Sans Serif 8.25 ptolarak ayarlanmıştır. Aşağıdaki resimde, varsayılan yazı tipini kullanan bir pencere gösterilmektedir.

.NET Framework'te varsayılan denetim yazı tipi

.NET Core 3.0'dan başlayarak, varsayılan yazı tipi Segoe UI 9 pt olarak ayarlanır (SystemFonts.MessageBoxFontile aynı yazı tipi). Bu değişikliğin sonucunda formlar ve denetimler, yeni varsayılan yazı tipinin daha büyük boyutunu hesaba katmak için yaklaşık 27% daha büyük boyutlandırılır. Örneğin:

.NET Core'teki varsayılan denetim yazı tipi

Bu değişiklik,Windows kullanıcı deneyimi (UX) yönergeleriyle uyumlu olacak şekilde yapılmıştır.

Sürüm kullanıma sunulmuştur

3.0

Formların ve denetimlerin boyutundaki değişiklik nedeniyle uygulamanızın doğru şekilde işlendiğini doğrulayın.

Tek bir formda özgün yazı tipini korumak için varsayılan yazı tipini Microsoft Sans Serif 8.25 ptolarak ayarlayın. Mesela:

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

Alternatif olarak, uygulamanın tamamı için varsayılan yazı tipini aşağıdaki yollardan biriyle değiştirebilirsiniz:

  • ApplicationDefaultFont MSBuild özelliğini "Microsoft Sans Serif, 8.25pt" olarak ayarlayarak. Visual Studio'ya tasarımcıdaki yeni ayarları kullanma izni verdiğinden bu tercih edilen tekniktir.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Application.SetDefaultFont(Font)numarasını arayarak.

    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

Etkilenen API'ler

Hiç kimse.


FolderBrowserDialog'un modernizasyonu

.NET Core için Windows Forms uygulamalarında FolderBrowserDialog denetimi değişti.

Açıklamayı değiştir

.NET Framework'te Windows forms, FolderBrowserDialog denetimi için aşağıdaki iletişim kutusunu kullanır:

.NET Framework'nde FolderBrowserDialogControl

.NET Core 3.0'da Windows Forms, Windows Vista'da kullanıma sunulan daha yeni bir COM tabanlı denetim kullanır:

.NET Core'daki FolderBrowserDialogControl

Sürüm kullanıma sunulmuştur

3.0

Diyalog otomatik olarak yükseltilecektir.

Özgün iletişim kutusunu korumak istiyorsanız, aşağıdaki kod parçasında gösterildiği gibi iletişim kutusunu göstermeden önce FolderBrowserDialog.AutoUpgradeEnabled özelliğini false olarak ayarlayın:

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

Kategori

Windows Forms

Etkilenen API'ler


SerializableAttribute bazı Windows Forms türlerinden kaldırıldı

SerializableAttribute bilinen ikili serileştirme senaryoları olmayan bazı Windows Forms sınıflarından kaldırılmıştır.

Açıklamayı değiştir

Aşağıdaki türler .NET Framework'teki SerializableAttribute ile dekore edilmiştir, ancak özniteliği .NET Core'da kaldırılmıştır:

Geçmişte bu serileştirme mekanizmasının ciddi bakım ve güvenlik kaygıları vardı. Türlerde SerializableAttribute korumak, bu türlerin sürümden sürüme serileştirme değişiklikleri ve çerçeveden çerçeveye serileştirme değişiklikleri için test edilmesi gerektiği anlamına gelir. Bu, bu türleri geliştirmeyi zorlaştırır ve bakımını yapmak maliyetli olabilir. Bu türlerde bilinen ikili serileştirme senaryoları yoktur ve bu da özniteliği kaldırmanın etkisini en aza indirir.

Daha fazla bilgi için bkz. İkili serileştirme.

Sürüm kullanıma sunulmuştur

3.0

Bu türlerin serileştirilebilir olarak işaretlenmesine bağlı olabilecek tüm kodları güncelleştirin.

Kategori

Windows Forms

Etkilenen API'ler

  • Hiç kimse

AllowUpdateChildControlIndexForTabControls uyumluluk ayarı desteklenmiyor

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls uyumluluk anahtarı, .NET Framework 4.6 ve sonraki sürümlerde Windows Forms'da desteklenir, ancak .NET Core veya .NET 5.0 ve sonraki sürümlerde desteklenmez.

Açıklamayı değiştir

.NET Framework 4.6 ve sonraki sürümlerinde bir sekme seçildiğinde denetim koleksiyonu yeniden sıralanır. Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls uyumluluk anahtarı, bir uygulamanın bu davranış istenmeyen durumlarda bu yeniden sıralamayı atlamasına olanak tanır.

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif işlevler kullanılamaz.

Kategori

Windows Forms

Etkilenen API'ler

  • Hiç kimse

DomainUpDown.UseLegacyScrolling uyumluluk anahtarı desteklenmiyor

.NET Framework 4.7.1'de kullanıma sunulan Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling uyumluluk anahtarı, .NET Core veya .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.7.1'den başlayarak, Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling uyumluluk anahtarı geliştiricilerin bağımsız DomainUpDown.DownButton() ve DomainUpDown.UpButton() eylemlerini geri çevirmesine olanak sağladı. Anahtar eski davranışı geri yükledi; bağlam metni varsa DomainUpDown.UpButton() yoksayıldığı ve geliştiricinin DomainUpDown.UpButton() eyleminden önce denetimde DomainUpDown.DownButton() eylemi kullanması gerektiği durum. Daha fazla bilgi için bkz. <AppContextSwitchOverrides> öğesi.

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif işlevler kullanılamaz.

Kategori

Windows Forms

Etkilenen API'ler


DoNotLoadLatestRichEditControl uyumluluk anahtarı desteklenmiyor

.NET Framework 4.7.1'de kullanıma sunulan Switch.System.Windows.Forms.UseLegacyImages uyumluluk anahtarı, .NET Core veya .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.6.2 ve önceki sürümlerde, RichTextBox denetimi Win32 RichEdit denetimi v3.0'ın örneğini oluşturur ve .NET Framework 4.7.1'i hedefleyen uygulamalar için RichTextBox denetimi RichEdit v4.1 'i (msftedit.dll) oluşturur. .NET Framework 4.7.1 ve sonraki sürümleri hedefleyen uygulamaların yeni RichEdit v4.1 denetimini devre dışı bırakmasına ve bunun yerine eski RichEdit v3 denetimini kullanmasına izin vermek için Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl uyumluluk anahtarı kullanıma sunulmuştur.

.NET Core ve .NET 5.0 ve sonraki sürümlerde Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl anahtarı desteklenmez. yalnızca RichTextBox denetiminin yeni sürümleri desteklenir.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtarlayıcı desteklenmez ve alternatif işlevler yoktur.

Kategori

Windows Forms

Etkilenen API'ler


DoNotSupportSelectAllShortcutInMultilineTextBox uyumluluk anahtarı desteklenmiyor

.NET Framework 4.6.1'de kullanıma sunulan Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox uyumluluk anahtarı, .NET Core ve .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.6.1'den başlayarak, TextBox denetiminde Ctrl + A kısayol tuşunu seçerek tüm metni seçin. .NET Framework 4.6 ve önceki sürümlerde, Textbox.ShortcutsEnabled ve TextBox.Multiline özellikleri her ikisi de trueolarak ayarlandığında, Ctrl + A kısayol tuşu tüm metni seçemiyordu. özgün davranışı korumak için .NET Framework 4.6.1'de Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox uyumluluk anahtarı kullanıma sunulmuştur. Daha fazla bilgi için bkz. TextBox.ProcessCmdKey.

.NET Core ve .NET 5.0 ve sonraki sürümlerde Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif bir işlev mevcut değildir.

Kategori

Windows Forms

Etkilenen API'ler

  • Hiç kimse

DontSupportReentrantFilterMessage uyumluluk anahtarı desteklenmiyor

.NET Framework 4.6.1'de kullanıma sunulan Switch.System.Windows.Forms.DontSupportReentrantFilterMessage uyumluluk anahtarı, .NET Core ve .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.6.1'den başlayarak, Switch.System.Windows.Forms.DontSupportReentrantFilterMessage uyumluluk anahtarı, Application.FilterMessage iletisi özel bir IMessageFilter.PreFilterMessage uygulamasıyla çağrıldığında olası IndexOutOfRangeException özel durumlarını giderir. Daha fazla bilgi için bkz. Hafifletme: Özelleştirilmiş IMessageFilter.PreFilterMessage Uygulamaları.

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.DontSupportReentrantFilterMessage anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif işlevler kullanılamaz.

Kategori

Windows Forms

Etkilenen API'ler


EnableVisualStyleValidation uyumluluk anahtarı desteklenmiyor

Switch.System.Windows.Forms.EnableVisualStyleValidation uyumluluk anahtarı .NET Core veya .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework'te Switch.System.Windows.Forms.EnableVisualStyleValidation uyumluluk anahtarı, bir uygulamanın sayısal biçimde sağlanan görsel stilleri doğrulamasını geri çevirmesine izin verdi.

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.EnableVisualStyleValidation anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar düğmesi desteklenmiyor ve alternatif bir işlev mevcut değil.

Kategori

Windows Forms

Etkilenen API'ler

  • Hiç kimse

UseLegacyContextMenuStripSourceControlValue uyumluluk geçişi desteklenmiyor

.NET Framework 4.7.2'de kullanıma sunulan Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue uyumluluk anahtarı, .NET Core veya .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.7.2'den itibaren, Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue uyumluluk anahtarı, geliştiricinin ContextMenuStrip.SourceControl özelliğinin artık kaynak denetimine bir başvuru döndüren yeni davranışını devre dışı bırakmasına olanak tanır. özelliğinin önceki davranışı nulldöndürmekti. Daha fazla bilgi için bkz. <AppContextSwitchOverrides> öğesi.

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif işlevler kullanılamaz.

Kategori

Windows Forms

Etkilenen API'ler


UseLegacyImages uyumluluk anahtarı desteklenmiyor

.NET Framework 4.8'de kullanıma sunulan Switch.System.Windows.Forms.UseLegacyImages uyumluluk anahtarı, .NET Core veya .NET 5.0 ve sonraki sürümlerde Windows Forms'da desteklenmez.

Açıklamayı değiştir

.NET Framework 4.8'den başlayarak, Switch.System.Windows.Forms.UseLegacyImages uyumluluk anahtarı yüksek DPI ortamlarındaki ClickOnce senaryolarındaki olası görüntü ölçeklendirme sorunlarını giderdi. trueolarak ayarlandığında, anahtar kullanıcının ölçeği 100%'den büyük olarak ayarlanmış olan yüksek DPI ekranlarında eski görüntü ölçeklendirmesini geri yüklemesine olanak tanır. Daha fazla bilgi için bkz. GitHub'da .NET Framework 4.8 Sürüm Notları .

.NET Core ve .NET 5.0 ve sonraki sürümlerinde Switch.System.Windows.Forms.UseLegacyImages anahtarı desteklenmez.

Sürüm kullanıma sunulmuştur

3.0

Anahtarı kaldırın. Anahtar desteklenmez ve alternatif işlevler kullanılamaz.

Kategori

Windows Forms

Etkilenen API'ler

  • Hiç kimse

Hakkında ve SplashScreen şablonları bozuk

Visual Studio tarafından oluşturulan About.vb ve SplashScreen.vb dosyaları, My ad alanında .NET Core 3.0 ve 3.1 bulunmayan türlere başvurular içerir.

Sürüm kullanıma sunulmuştur

3.0

Açıklamayı değiştir

.NET Core 3.0 ve 3.1 tam Visual Basic My desteği içermez. Visual Basic Windows Forms uygulamaları için Visual Studio'daki hakkında ve SplashScreen form şablonları hakkında , türündeki kullanılamayan özelliklere başvurur.

Visual Basic My desteği .NET 5'te geliştirildi, projenizi .NET 5 veya sonraki bir sürüme yükseltin.

-veya-

Uygulamanızdaki Hakkında ve SplashScreen türlerindeki derleyici hatalarını düzeltin. My.Application.Info türü tarafından sağlanan bilgileri almak için System.Reflection.Assembly sınıfını kullanın. Her iki formun da düz bağlantı noktası burada mevcuttur.

Bahşiş

Bu örnek koddur ve iyileştirilmemiştir. Form yükleme süresini azaltmak için öznitelik listesi önbelleğe alınmalıdır.

Hakkında

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

Başlangıç Ekranı

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

Visual Basic Windows Forms

Etkilenen API'ler

Hiç kimse


Microsoft.VisualBasic.ApplicationServices ad alanındaki türler kullanılamıyor

Microsoft.VisualBasic.ApplicationServices ad alanındaki türler mevcut değil.

Sürüm kullanıma sunulmuştur

.NET Core 3.0

Açıklamayı değiştir

Microsoft.VisualBasic.ApplicationServices ad alanı türleri .NET Framework'te kullanılabilir. .NET Core 3.0 - 3.1'de kullanılamaz.

Gereksiz derleme bağımlılıklarını veya sonraki sürümlerde hataya neden olan değişiklikleri önlemek için türler kaldırıldı.

Bu ad alanı .NET 5'e eklendi, projenizi .NET 5 veya sonraki bir sürüme yükseltin.

-veya-

Kodunuz Microsoft.VisualBasic.ApplicationServices türlerinin ve üyelerinin kullanımına bağlıysa, .NET sınıf kitaplığında karşılık gelen bir türü veya üyeyi kullanabilirsiniz. Örneğin, bazı System.Environment ve System.Security.Principal.WindowsIdentity üyeleri Microsoft.VisualBasic.ApplicationServices.User sınıfının özelliklerine eşdeğer işlevler sağlar.

Kategori

Visual Basic

Etkilenen API'ler


Microsoft.VisualBasic.Devices ad alanındaki türler mevcut değil

Microsoft.VisualBasic.Devices ad alanındaki türler mevcut değil.

Sürüm kullanıma sunulmuştur

.NET Core 3.0

Açıklamayı değiştir

Microsoft.VisualBasic.Devices ad alanı türleri .NET Framework'te kullanılabilir. .NET Core 3.0 - 3.1'de kullanılamaz.

Gereksiz derleme bağımlılıklarını veya ilerideki sürümlerde uyumsuzluklara neden olabilecek değişiklikleri önlemek için türler kaldırıldı.

Bu ad alanı .NET 5'e eklendi, projenizi .NET 5 veya sonraki bir sürüme yükseltin.

-veya-

Kodunuz Microsoft.VisualBasic.Devices türlerinin ve üyelerinin kullanımına bağlıysa, .NET sınıf kitaplığında karşılık gelen bir türü veya üyeyi kullanabilirsiniz. Örneğin, Microsoft.VisualBasic.Devices.Clock sınıfına eşdeğer işlevsellik System.DateTime ve System.Environment türleri tarafından, Microsoft.VisualBasic.Devices.Ports sınıfına eşdeğer işlevsellik de System.IO.Ports ad alanında türler tarafından sağlanır.

Kategori

Visual Basic

Etkilenen API'ler


Microsoft.VisualBasic.MyServices ad alanındaki türler mevcut değil

Microsoft.VisualBasic.MyServices ad alanındaki türler mevcut değil.

Sürüm kullanıma sunulmuştur

.NET Core 3.0

Açıklamayı değiştir

Microsoft.VisualBasic.MyServices ad alanı türleri .NET Framework'te kullanılabilir. .NET Core 3.0 - 3.1'de kullanılamaz.

Gereksiz derleme bağımlılıklarını veya sonraki sürümlerde hataya neden olan değişiklikleri önlemek için türler kaldırıldı.

Bu ad alanı .NET 5'e eklendi, projenizi .NET 5 veya sonraki bir sürüme yükseltin.

-veya-

Kodunuz Microsoft.VisualBasic.MyServices türlerinin ve bunların üyelerinin kullanımına bağlıysa, .NET sınıf kitaplığında karşılık gelen türler ve üyeler vardır. Aşağıda, Microsoft.VisualBasic.MyServices türlerinin eşdeğer .NET sınıf kitaplığı türleriyle eşlemesi yer alır:

Microsoft.VisualBasic.MyServices türü .NET sınıf kitaplığı türü
ClipboardProxy WPF uygulamaları için System.Windows.Clipboard, Windows Forms uygulamaları için System.Windows.Forms.Clipboard
FileSystemProxy System.IO namespace içindeki türler
RegistryProxy Microsoft.Win32 ad alanında kayıt defteriyle ilgili türler
SpecialDirectoriesProxy Environment.GetFolderPath

Kategori

Visual Basic

Etkilenen API'ler


Ayrıca bkz.

  • .NET Core üzerinde her zaman istisna atan API'ler
  • .NET Core üzerinde bulunmayan .NET Framework teknolojileri