.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ı
- UseShellExecute'in varsayılan değerindeki değişiklik
- IDispatchImplAttribute API kaldırıldı
- UnauthorizedAccessException, FileSystemInfo.Attributes tarafından oluşturulan bir hatadır
- Bozulmuş süreç durumu istisnalarını işleme desteklenmez
- UriBuilder özellikleri artık baştaki karakterleri eklemiyor
- Başlatmadığınız işlemler için Process.StartInfo, InvalidOperationException fırlatır
.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.UseShellExecutetrue
olarak ayarlanırsa dolaylı olarak ilişkili bir uygulamayı başlatmanızı sağlar. .NET Framework'te, ProcessStartInfo.UseShellExecute için varsayılan değer true
değ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 false
olarak ayarlamanız gerekir. .NET Core'da, ProcessStartInfo.UseShellExecute için varsayılan değer false
değ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.UseShellExecutetrue
olduğunda işlevseldir:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
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 false
olarak 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ı.
Önerilen eylem
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
Önerilen eylem
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
Önerilen eylem
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
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy öğesi
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 ##main
olabilir.
.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
Önerilen eylem
Ö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=4
olarak. - .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
Önerilen eylem
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
- SignedCms.ComputeSignature Boole parametresi dikkate alınmaktadır
.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 true
olarak 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 true
olarak 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
Önerilen eylem
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 false
olarak 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
, ManifestResourceName
veya DependentUpon
meta verileri belirtilmemişse, MSBuild, <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
deseninde 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
.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>.resources
deseninde 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 (MyProject
Not
Proje dosyasındaki bir EmbeddedResource
öğesinde belirtilen LogicalName
, ManifestResourceName
veya 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 true
olarak ayarlandığında, MSBuild aynı konumda bulunan bir kaynak dosyayı arar ve bu dosyadan bir namespace ve sınıf adı çıkarır.
EmbeddedResourceUseDependentUponConvention
false
olarak ayarlarsanız, MSBuild bildirim adını önceki davranışa göre oluşturur ve bu da RootNamespace
ve göreli dosya yolunu birleştirir.
Önerilen eylem
Ç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
EmbeddedResourceUseDependentUponConvention
'ıfalse
olarak ayarlayarak yeni adlandırma kuralından vazgeçebilirsiniz.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategori
MSBuild
Etkilenen API'ler
Geçerli Değil
Ağ
.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
Önerilen eylem
kullanım dışı bırakılan System.Net.WebClientyerine System.Net.Http.HttpClient sınıfını kullanın.
Kategori
Ağ
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.
- Kaldırılan denetimler
- Tooltip gösteriliyorsa CellFormatting olayı oluşmuyor
- Control.DefaultFont Segoe UI 9 pt olarak değiştirildi
- FolderBrowserDialog'ın Modernizasyonu
- SerializableAttribute bazı Windows Forms türlerinden kaldırıldı
- AllowUpdateChildControlIndexForTabControls uyumluluk anahtarı desteklenmiyor
- DomainUpDown.UseLegacyScrolling uyumluluk anahtarı desteklenmiyor
- DoNotLoadLatestRichEditControl uyumluluk anahtarı desteklenmiyor
- DoNotSupportSelectAllShortcutInMultilineTextBox uyumluluk anahtarı desteklenmiyor
- DontSupportReentrantFilterMessage uyumluluk anahtarı desteklenmiyor
- EnableVisualStyleValidation uyumluluk anahtarı desteklenmiyor
- UseLegacyContextMenuStripSourceControlValue uyumluluk anahtarı desteklenmiyor
- UseLegacyImages uyumluluk anahtarı desteklenmiyor
- Hakkında ve SplashScreen şablonları Visual Basic için bozuk
- Microsoft.VisualBasic.ApplicationServices ad alanında Türleri
- Microsoft.VisualBasic.Devices ad alanında Türleri
- Microsoft.VisualBasic.MyServices ad alanındaki Türler
.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:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Sürüm kullanıma sunulmuştur
3.1
Önerilen eylem
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
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
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
Önerilen eylem
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 pt
olarak ayarlanmıştır. Aşağıdaki resimde, varsayılan yazı tipini kullanan bir pencere gösterilmektedir.
.NET Framework'te
.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,
Sürüm kullanıma sunulmuştur
3.0
Önerilen eylem
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 pt
olarak 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:
Sürüm kullanıma sunulmuştur
3.0
Önerilen eylem
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:
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
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
Önerilen eylem
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
Önerilen eylem
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
Önerilen eylem
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
Önerilen eylem
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 true
olarak 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
Önerilen eylem
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
Önerilen eylem
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
Önerilen eylem
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ışı null
dö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
Önerilen eylem
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.
true
olarak 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
Önerilen eylem
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
Önerilen eylem
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ı.
Önerilen eylem
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ı.
Önerilen eylem
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ı.
Önerilen eylem
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