Zásadní změny migrace z rozhraní .NET Framework na .NET Core
Pokud migrujete aplikaci z rozhraní .NET Framework na .NET Core verze 1.0 až 3.1, můžou vás zásadní změny uvedené v tomto článku ovlivnit. Zásadní změny jsou seskupené podle kategorií a v těchto kategoriích podle verze .NET Core, ve které byly zavedeny.
Poznámka
Tento článek není úplný seznam zásadních změn mezi rozhraním .NET Framework a .NET Core. Nejdůležitější zásadní změny jsou přidávány sem, jakmile o nich zjistíme.
Základní knihovny .NET
- Změna výchozí hodnoty UseShellExecute
- rozhraní API IDispatchImplAttribute se odebere
- UnauthorizedAccessException vyvolána FileSystemInfo.Attributes
- Zpracování výjimek stavu procesu při poškození není podporováno
- Vlastnosti nástroje UriBuilder už nepředřazují počáteční znaky
- Process.StartInfo vyvolá výjimku InvalidOperationException pro procesy, které jste nespusili
.NET 8
rozhraní API IDispatchImplAttribute je odstraněno
.NET Core 2.1
Změna výchozí hodnoty UseShellExecute
ProcessStartInfo.UseShellExecute má výchozí hodnotu false
v .NET Core. V rozhraní .NET Framework je její výchozí hodnota true
.
Změnit popis
Process.Start umožňuje spustit aplikaci přímo, například s kódem, jako je Process.Start("mspaint.exe")
, který spustí Malování. Umožňuje také nepřímo spustit přidruženou aplikaci, pokud je ProcessStartInfo.UseShellExecute nastavena na true
. V rozhraní .NET Framework je výchozí hodnota pro ProcessStartInfo.UseShellExecutetrue
, což znamená, že kód, jako je Process.Start("mytextfile.txt")
, spustí Poznámkový blok, pokud jste přidružili .txt soubory s tímto editorem. Pokud chcete zabránit nepřímému spuštění aplikace v rozhraní .NET Framework, musíte explicitně nastavit ProcessStartInfo.UseShellExecute na false
. V .NET Core je výchozí hodnota pro ProcessStartInfo.UseShellExecutefalse
. To znamená, že přidružené aplikace se ve výchozím nastavení nespouštějí při volání Process.Start
.
Následující vlastnosti na System.Diagnostics.ProcessStartInfo jsou funkční pouze, když je ProcessStartInfo.UseShellExecutetrue
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
Tato změna byla zavedena v .NET Core z důvodů výkonu. Obvykle Process.Start slouží ke spuštění aplikace přímo. Spuštění aplikace přímo nemusí zahrnovat prostředí Windows a vyžadovat související náklady na výkon. Aby byl tento výchozí případ rychlejší, změní .NET Core výchozí hodnotu ProcessStartInfo.UseShellExecute na false
. Pokud ji potřebujete, můžete se přihlásit k pomalejší cestě.
Zavedená verze
2.1
Poznámka
V dřívějších verzích .NET Core se UseShellExecute
pro Windows neimplementoval.
Doporučená akce
Pokud se vaše aplikace spoléhá na staré chování, zavolejte Process.Start(ProcessStartInfo) a nastavte UseShellExecute na true
na objektu ProcessStartInfo.
Kategorie
Základní knihovny .NET
Ovlivněná rozhraní API
.NET Core 1.0
Neautorizovaná přístupová výjimka vyvolaná FileSystemInfo.Attributes
V .NET Core je vyvolán UnauthorizedAccessException, když se volající pokusí nastavit hodnotu atributu souboru, ale nemá oprávnění k zápisu.
Změnit popis
V rozhraní .NET Framework je vyvolán ArgumentException, když se volající pokusí nastavit hodnotu atributu souboru v FileSystemInfo.Attributes, ale nemá oprávnění k zápisu. V .NET Core se místo toho vyvolá UnauthorizedAccessException. (V .NET Core se stále vyvolá ArgumentException, pokud se volající pokusí nastavit neplatný atribut souboru.)
Zavedená verze
1.0
Doporučená akce
Podle potřeby upravte všechny příkazy catch
tak, aby zachytily UnauthorizedAccessException místo ArgumentExceptionnebo kromě něj.
Kategorie
Základní knihovny .NET
Ovlivněná rozhraní API
Zpracování výjimek poškozeného stavu není podporováno.
Zpracování výjimek poškozeného stavu procesu v .NET Core se nepodporuje.
Změnit popis
Dříve bylo možné zachytit a zpracovat výjimky poškozeného stavu procesu obslužnými rutinami ve spravovaném kódu, například pomocí příkazu try-catch v jazyce C#.
Počínaje verzí .NET Core 1.0 nelze v rámci spravovaného kódu zpracovat výjimky poškozeného stavu procesu. Modul CLR (Common Language Runtime) nedoručuje spravovanému kódu výjimky poškozeného stavu procesu.
Představená verze
1.0
Doporučená akce
Vyhněte se nutnosti řešit výjimky kvůli poškození stavu procesu tím, že raději adresujete samotné příčiny těchto situací. Pokud je naprosto nezbytné zpracovat výjimky poškozeného stavu procesu, napište obslužnou rutinu výjimky v kódu jazyka C nebo C++.
Kategorie
Základní knihovny .NET
Ovlivněná rozhraní API
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- elementu legacyCorruptedStateExceptionsPolicy
Vlastnosti nástroje UriBuilder už nemají předem připravené počáteční znaky.
UriBuilder.Fragment již nepředřazuje úvodní znak #
a UriBuilder.Query již nepředřazuje úvodní znak ?
, pokud již je přítomen.
Změnit popis
V rozhraní .NET Framework vlastnosti UriBuilder.Fragment a UriBuilder.Query vždy přidávají před ukládanou hodnotu znak #
nebo ?
, přičemž je použito v tomto pořadí. Toto chování může vést k více #
nebo ?
znaků v uložené hodnotě, pokud řetězec již obsahuje jeden z těchto úvodních znaků. Například hodnota UriBuilder.Fragment se může stát ##main
.
Počínaje verzí .NET Core 1.0 tyto vlastnosti již nepřidávají znaky #
ani ?
na začátek uložené hodnoty, pokud již na začátku řetězce jsou.
Představená verze
1.0
Doporučená akce
Při nastavování hodnot vlastností už nemusíte explicitně odebírat žádné z těchto úvodních znaků. To je zvlášť užitečné, když připojujete hodnoty, protože už nemusíte odebírat úvodní #
nebo ?
při každém připojení.
Následující fragment kódu například ukazuje rozdíl chování mezi rozhraním .NET Framework a .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);
- V rozhraní .NET Framework je výstup
????one=1&two=2&three=3&four=4
. - V .NET Core je výstup
?one=1&two=2&three=3&four=4
.
Kategorie
Základní knihovny .NET
Ovlivněná rozhraní API
Process.StartInfo vyvolá výjimku InvalidOperationException pro procesy, které jste nespusili.
Čtení vlastnosti Process.StartInfo procesů, které váš kód nespustil, vyvolá InvalidOperationException.
Změnit popis
V rozhraní .NET Framework, při přístupu k vlastnosti Process.StartInfo pro procesy, které váš kód nespustil, se vrátí zástupný objekt ProcessStartInfo. Fiktivní objekt obsahuje výchozí hodnoty pro všechny jeho vlastnosti s výjimkou EnvironmentVariables.
Počínaje .NET Core 1.0, pokud přečtete vlastnost Process.StartInfo procesu, který jste nespustili (tj. voláním Process.Start), vyvolá se InvalidOperationException.
Uvedená verze
1.0
Doporučená akce
Nepřistupujte k vlastnosti Process.StartInfo pro procesy, které váš kód nespusl. Například, nečtěte tuto vlastnost pro procesy vrácené Process.GetProcesses.
Kategorie
Základní knihovny .NET
Ovlivněná rozhraní API
Kryptografie
.NET Core 2.1
Je respektován booleovský parametr SignedCms.ComputeSignature.
V .NET Core se dodržuje logický parametr silent
metody SignedCms.ComputeSignature(CmsSigner, Boolean). Výzva k zadání kódu PIN se nezobrazí, pokud je tento parametr nastavený na true
.
Změnit popis
V rámci rozhraní .NET Framework se silent
parametr metody SignedCms.ComputeSignature(CmsSigner, Boolean) ignoruje a pokud je to vyžadováno poskytovatelem, vždy se zobrazí výzva k zadání kódu PIN. V .NET Core se respektuje parametr silent
a pokud je nastavený na true
, výzva k zadání kódu PIN se nikdy nezobrazí, i když to poskytovatel vyžaduje.
Podpora zpráv CMS/PKCS #7 byla zavedena do .NET Core ve verzi 2.1.
Zavedená verze
2.1
Doporučená akce
Pokud chcete zajistit, aby se v případě potřeby zobrazila výzva k zadání kódu PIN, měly by desktopové aplikace volat SignedCms.ComputeSignature(CmsSigner, Boolean) a nastavit logický parametr na false
. Výsledné chování je stejné jako v rozhraní .NET Framework bez ohledu na to, jestli je tam tichý kontext deaktivován.
Kategorie
Kryptografie
Ovlivněná rozhraní API
MSBuild
.NET Core 3.0
Změna názvu souboru manifestu prostředku
Počínaje .NET Core 3.0 vygeneruje MSBuild ve výchozím případě pro soubory prostředků jiný název souboru manifestu.
Zavedená verze
3.0
Změnit popis
Před .NET Core 3.0, pokud nebyla zadána žádná LogicalName
, ManifestResourceName
nebo metadata DependentUpon
pro položku EmbeddedResource
v souboru projektu, nástroj MSBuild vygeneroval název souboru manifestu ve vzoru <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Pokud RootNamespace
není definován v souboru projektu, je výchozí název projektu. Například vygenerovaný název manifestu pro soubor prostředků s názvem Form1.resx v kořenovém adresáři projektu byl MyProject.Form1.resources.
Počínaje .NET Core 3.0, pokud je soubor prostředků umístěný společně se zdrojovým souborem se stejným názvem (například Form1.resx a Form1.cs), nástroj MSBuild používá informace o typu ze zdrojového souboru k vygenerování názvu souboru manifestu podle vzoru <Namespace>.<ClassName>.resources
. Obor názvů a název třídy se získávají z prvního typu, který se nachází v souběžném zdrojovém souboru. Například vygenerovaný název manifestu pro soubor prostředků s názvem Form1.resx, který je spoluřazený se zdrojovým souborem s názvem Form1.cs, je MyNamespace.Form1.resources. Klíčovou věcí, kterou je třeba poznamenat, je, že první část názvu souboru se liší od předchozích verzí .NET Core (MyNamespace místo MyProject).
Poznámka
Pokud máte metadata LogicalName
, ManifestResourceName
nebo DependentUpon
zadaná u položky EmbeddedResource
v souboru projektu, tato změna nemá vliv na soubor prostředků.
Tato změna způsobující chybu byla zavedena přidáním vlastnosti EmbeddedResourceUseDependentUponConvention
do projektů .NET Core. Ve výchozím nastavení nejsou soubory prostředků explicitně uvedeny v souboru projektu .NET Core, takže nemají žádná metadata DependentUpon
k určení, jak pojmenovat soubor s vygenerovanými prostředky .resources. Pokud je EmbeddedResourceUseDependentUponConvention
nastavena na true
, což je výchozí, nástroj MSBuild vyhledá společnělokovaný zdrojový soubor a extrahuje z daného souboru obor názvů a název třídy. Pokud nastavíte EmbeddedResourceUseDependentUponConvention
na false
, nástroj MSBuild vygeneruje název manifestu podle předchozího chování, které kombinuje RootNamespace
a relativní cestu k souboru.
Doporučená akce
Ve většině případů se nevyžaduje žádná akce na straně vývojáře a vaše aplikace by měla dál fungovat. Pokud ale tato změna aplikaci přeruší, můžete:
Změňte kód tak, aby očekával nový název manifestu.
Odhlaste se z nové konvence vytváření názvů nastavením
EmbeddedResourceUseDependentUponConvention
nafalse
v souboru projektu.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategorie
MSBuild
Ovlivněná rozhraní API
Není k dispozici
Síťování
.NET Core 2.0
WebClient.CancelAsync se vždy nezruší okamžitě.
Od verze .NET Core 2.0 volání WebClient.CancelAsync() okamžitě nezruší požadavek, pokud načítání odpovědi již začalo.
Změnit popis
Dříve volání WebClient.CancelAsync() žádost okamžitě zrušilo. Od .NET Core 2.0 volání WebClient.CancelAsync() zruší požadavek okamžitě, pouze pokud ještě nezačalo stahování odpovědi. Pokud se odpověď začala načítat, požadavek se zruší až po přečtení úplné odpovědi.
Tato změna byla implementována, protože rozhraní API WebClient je zastaralé ve prospěch HttpClient.
Zavedená verze
2.0
Doporučená akce
Místo System.Net.WebClientpoužijte třídu System.Net.Http.HttpClient, která je zastaralá.
Kategorie
Síťování
Ovlivněná rozhraní API
Windows Forms
Podpora modelu Windows Forms byla přidána do .NET Core ve verzi 3.0. Pokud migrujete aplikaci Windows Forms z rozhraní .NET Framework do .NET Core, můžou zásadní změny uvedené tady ovlivnit vaši aplikaci.
- odebrané ovládací prvky
- událost CellFormatting se nevyvolá, pokud se zobrazí popis
- cs-CZ: Control.DefaultFont byl změněn na Segoe UI 9 pt
- Modernizace dialogu pro procházení složek
- SerializableAttribute byl odebrán z některých typů Windows Forms
- Přepínač kompatibility AllowUpdateChildControlIndexForTabControls není podporován
- Přepínač kompatibility DomainUpDown.UseLegacyScrolling se nepodporuje
- Přepínač kompatibility DoNotLoadLatestRichEditControl není podporován
- Přepínač kompatibility DoNotSupportSelectAllShortcutInMultilineTextBox se nepodporuje
- Přepínač kompatibility DontSupportReentrantFilterMessage se nepodporuje
- přepínač kompatibility EnableVisualStyleValidation se nepodporuje
- Kompatibilitní přepínač UseLegacyContextMenuStripSourceControlValue není podporován
- Přepínač kompatibility UseLegacyImages se nepodporuje
- Šablony About a SplashScreen jsou nefunkční pro Visual Basic.
- Typy v oboru názvů Microsoft.VisualBasic.ApplicationServices nejsou k dispozici
- Typy v oboru názvů Microsoft.VisualBasic.Devices nejsou k dispozici
- Typy v oboru názvů Microsoft.VisualBasic.MyServices nejsou k dispozici
.NET Core 3.1
Odebrané ovládací prvky
Počínaje verzí .NET Core 3.1 už některé ovládací prvky Windows Forms nejsou k dispozici.
Změnit popis
Od verze .NET Core 3.1 už nejsou k dispozici různé ovládací prvky Windows Forms. V rozhraní .NET Framework 2.0 byly zavedeny náhradní ovládací prvky, které mají lepší návrh a podporu. Zastaralé ovládací prvky byly dříve odebrány z nástrojů návrháře, ale byly stále k dispozici k použití.
Následující typy už nejsou k dispozici:
- 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
Představená verze
3.1
Doporučená akce
Každý odebraný ovládací prvek má doporučený náhradní ovládací prvek. Projděte si následující tabulku:
Odebrání ovládacího prvku (API) | Doporučená náhrada | Přidružená rozhraní API, která se odeberou |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Hlavní nabídka | MenuStrip | |
Menu | ToolStripDropDown, ToolStripDropDownMenu | KolekceMenuPoložek |
MenuItem | ToolStripMenuItem | |
Panel nástrojů | ToolStrip | Vzhled lišty nástrojů |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategorie
Windows Forms
Ovlivněná rozhraní API
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
Událost CellFormatting se nevyvolá, pokud je zobrazen popisek.
DataGridView teď zobrazuje text buňky a popisy chyb při najetí myší a při výběru pomocí klávesnice. Pokud se zobrazí popis, událost DataGridView.CellFormatting se nevyvolá.
Změnit popis
Před .NET Core 3.1 DataGridView, který měl vlastnost ShowCellToolTips nastavenou na true
, zobrazoval nápovědu pro text a chyby buňky při najetí myší na buňku. Popisky se nezobrazovaly, když byla buňka vybrána pomocí klávesnice, například klávesou Tab, klávesovými zkratkami nebo navigací pomocí šipek. Pokud uživatel upravil buňku a potom, zatímco DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou vlastnost ToolTipText, byla vyvolána událost CellFormatting pro formátování textu buňky pro zobrazení v buňce.
Aby bylo dosaženo standardů přístupnosti, počínaje .NET Core 3.1, DataGridView, která má vlastnost ShowCellToolTips nastavenou na true
, zobrazuje popisky pro text buňky a chyby nejen při najetí myší, ale také když je vybrána pomocí klávesnice. V důsledku této změny je událost CellFormattingnení vyvolána, pokud jsou buňky, které nemají nastavenou vlastnost ToolTipText, najet myší, když je DataGridView v režimu úprav. Událost není vyvolána, protože obsah najeté buňky se místo zobrazení v buňce zobrazí jako popis.
Zavedená verze
3.1
Doporučená akce
Refaktorovat jakýkoli kód, který závisí na události CellFormatting, zatímco DataGridView je v editačním režimu.
Kategorie
Windows Forms
Ovlivněná rozhraní API
Žádný
.NET Core 3.0
Výchozí písmo ovládacího prvku se změnilo na Segoe UI 9 pt
Změnit popis
V rozhraní .NET Framework byla vlastnost Control.DefaultFont nastavena na Microsoft Sans Serif 8.25 pt
. Následující obrázek znázorňuje okno, které používá výchozí písmo.
Počínaje verzí .NET Core 3.0 je výchozí písmo nastaveno na Segoe UI 9 pt
(stejné písmo jako SystemFonts.MessageBoxFont). V důsledku této změny mají formuláře a ovládací prvky velikost přibližně 27% větší, aby zohlednily větší velikost nového výchozího písma. Například:
Tato změna byla provedena v souladu s pokyny pro uživatelské prostředí (UX) systému Windows .
Verze byla představena
3.0
Doporučená akce
Vzhledem ke změně velikosti formulářů a ovládacích prvků se ujistěte, že se aplikace správně vykresluje.
Chcete-li zachovat původní písmo pro jeden formulář, nastavte jeho výchozí písmo na Microsoft Sans Serif 8.25 pt
. Například:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Nebo můžete změnit výchozí písmo pro celou aplikaci některým z následujících způsobů:
Nastavením vlastnosti
ApplicationDefaultFont
MSBuild na "Microsoft Sans Serif, 8.25pt". Toto je upřednostňovaná technika, protože umožňuje Visual Studio používat nová nastavení v návrháři.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>
Voláním 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()); } }
Kategorie
- Windows Forms
Ovlivněná rozhraní API
Žádný.
Modernizace složkyBrowserDialog
Ovládací prvek FolderBrowserDialog se v aplikacích Windows Forms pro .NET Core změnil.
Změnit popis
V rozhraní .NET Framework používá formuláře Windows pro ovládací prvek FolderBrowserDialog následující dialogové okno:
V rozhraní .NET Core 3.0 používá Windows Forms novější ovládací prvek založený na modelu COM, který byl zaveden v systému Windows Vista:
.NET Core
Zavedená verze
3.0
Doporučená akce
Dialogové okno se automaticky upgraduje.
Pokud chcete zachovat původní dialogové okno, nastavte vlastnost FolderBrowserDialog.AutoUpgradeEnabled na false
před zobrazením dialogového okna, jak je znázorněno v následujícím fragmentu kódu:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Kategorie
Windows Forms
Ovlivněná rozhraní API
SerializableAttribute odebrán z některých typů Windows Forms
SerializableAttribute byl odebrán z některých tříd Modelu Windows Forms, které nemají žádné známé scénáře binární serializace.
Změnit popis
Následující typy jsou zdobeny SerializableAttribute v rozhraní .NET Framework, ale atribut byl odebrán v .NET Core:
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
Tento mechanismus serializace má v minulosti vážné obavy ohledně údržby a zabezpečení. Nutnost udržovat SerializableAttribute
u typů znamená, že tyto typy musí být testovány na změny serializace mezi verzemi a potenciálně na změny serializace mezi rámci. To znesnadňuje vývoj těchto typů a může být nákladný na údržbu. Tyto typy nemají žádné známé scénáře binární serializace, které minimalizují dopad odebrání atributu.
Další informace naleznete v binární serializace.
Představená verze
3.0
Doporučená akce
Aktualizujte veškerý kód, který může záviset na těchto typech, které jsou označené jako serializovatelné.
Kategorie
Windows Forms
Ovlivněná rozhraní API
- Žádný
Přepínač kompatibility AllowUpdateChildControlIndexForTabControls se nepodporuje.
Přepínač kompatibility Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
je podporován ve Windows Forms v rozhraní .NET Framework 4.6 a novějších verzích, ale nepodporuje se v .NET Core nebo .NET 5.0 a novějších verzích.
Změnit popis
V rámci .NET Framework 4.6 a novějších verzí se při výběru karty znovu uspořádá její kolekce ovládacích prvků. Přepínač kompatibility Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
umožňuje aplikaci toto přeuspořádání přeskočit, pokud je toto chování nežádoucí.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
nepodporuje.
Představená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
- Žádný
Přepínač kompatibility DomainUpDown.UseLegacyScrolling se nepodporuje.
Přepínač kompatibility Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
, který byl zaveden v rozhraní .NET Framework 4.7.1, není ve Windows Forms v .NET Core nebo .NET 5.0 a novějším podporován.
Změnit popis
Počínaje rozhraním .NET Framework 4.7.1 umožňuje přechod na kompatibilitu Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
vývojářům vyjádřit nesouhlas s nezávislými DomainUpDown.DownButton() a DomainUpDown.UpButton() akcemi. Přepínač obnovil starší verzi chování, ve kterém se DomainUpDown.UpButton() ignoruje, pokud je kontextový text k dispozici, a vývojář musí použít DomainUpDown.DownButton() akci ovládacího prvku před akcí DomainUpDown.UpButton(). Další informace naleznete v tématu <AppContextSwitchOverrides> element.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
nepodporuje.
Zavedená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
Nepodporovaný přepínač kompatibility DoNotLoadLatestRichEditControl
Přepínač kompatibility Switch.System.Windows.Forms.UseLegacyImages
, který byl zaveden v rozhraní .NET Framework 4.7.1, není ve Windows Forms v .NET Core nebo .NET 5.0 a novějším podporován.
Změnit popis
V rozhraní .NET Framework 4.6.2 a předchozích verzích vytvoří ovládací prvek RichTextBox instanci ovládacího prvku Win32 RichEdit verze 3.0 a pro aplikace, které cílí na rozhraní .NET Framework 4.7.1, RichTextBox ovládací prvek vytvoří instanci RichEdit v4.1 (v msftedit.dll). Přepínač kompatibility Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
byl zaveden tak, aby umožňoval aplikacím, které cílí na rozhraní .NET Framework 4.7.1 a novější verze, aby se odhlásily z nového ovládacího prvku RichEdit v4.1 a místo toho používaly starý ovládací prvek RichEdit v3.
V .NET Core a .NET 5.0 a novějších verzích se přepínač Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
nepodporuje. Podporují se jenom nové verze ovládacího prvku RichTextBox.
Zavedená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
Přepínač kompatibility pro DoNotSupportSelectAllShortcutInMultilineTextBox není podporován
Přepínač kompatibility Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
, který byl zaveden v rozhraní .NET Framework 4.6.1, není ve Windows Forms v .NET Core a .NET 5.0 a novějších podporovaný.
Změnit popis
Počínaje rozhraním .NET Framework 4.6.1 klávesová zkratka Ctrl + A ve vybraném ovládacím prvku TextBox vybrala veškerý text. V rozhraní .NET Framework 4.6 a předchozích verzích se stisknutím klávesové zkratky Ctrl + A nepovedlo vybrat veškerý text, pokud byly obě vlastnosti Textbox.ShortcutsEnabled a TextBox.Multiline nastaveny na true
. Přepínač kompatibility Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
byl zaveden v rozhraní .NET Framework 4.6.1, aby se zachovalo původní chování. Další informace naleznete v tématu TextBox.ProcessCmdKey.
V .NET Core a .NET 5.0 a novějších verzích se přepínač Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
nepodporuje.
Představená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
- Žádný
Přepínač kompatibility DontSupportReentrantFilterMessage není podporován.
Přepínač kompatibility Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
, který byl zaveden v rozhraní .NET Framework 4.6.1, není ve Windows Forms v .NET Core a .NET 5.0 a novějších podporovaný.
Změnit popis
Počínaje rozhraním .NET Framework 4.6.1 řeší přepínač kompatibility Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
možné výjimky IndexOutOfRangeException při zavolání zprávy Application.FilterMessage s vlastní implementací IMessageFilter.PreFilterMessage. Další informace naleznete v tématu Zmírnění: Vlastní Implementace IMessageFilter.PreFilterMessage.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
nepodporuje.
Verze představena
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
Přepínač kompatibility EnableVisualStyleValidation není podporován.
Přepínač kompatibility Switch.System.Windows.Forms.EnableVisualStyleValidation
není ve Windows Forms v .NET Core nebo .NET 5.0 a novějších podporovaný.
Změnit popis
V rozhraní .NET Framework přepínač kompatibility Switch.System.Windows.Forms.EnableVisualStyleValidation
povolil aplikaci vyjádřit nesouhlas s ověřováním vizuálních stylů zadaných v číselném formátu.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.EnableVisualStyleValidation
nepodporuje.
Zavedená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
- Žádný
Přepínač kompatibility UseLegacyContextMenuStripSourceControlValue není podporován.
Přepínač kompatibility Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
, který byl zaveden v rozhraní .NET Framework 4.7.2, není ve Windows Forms v .NET Core nebo .NET 5.0 a novějších podporovaný.
Změnit popis
Počínaje rozhraním .NET Framework 4.7.2 umožňuje přepínač kompatibility Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
vývojáři vyjádřit nesouhlas s novým chováním vlastnosti ContextMenuStrip.SourceControl, která nyní vrací odkaz na správu zdrojového kódu. Předchozí chování vlastnosti bylo, že vracelo null
. Další informace naleznete v tématu <AppContextSwitchOverrides> element.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
nepodporuje.
Zavedená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
Přepínač kompatibility UseLegacyImages se nepodporuje.
Přepínač kompatibility Switch.System.Windows.Forms.UseLegacyImages
, který byl zaveden v rozhraní .NET Framework 4.8, není ve Windows Forms v .NET Core nebo .NET 5.0 a novějších podporovaný.
Změnit popis
Počínaje rozhraním .NET Framework 4.8 vyřešil přepínač kompatibility Switch.System.Windows.Forms.UseLegacyImages
možné problémy se škálováním obrázků ve scénářích ClickOnce v prostředích s vysokým rozlišením DPI. Pokud je nastavená hodnota true
, přepínač umožňuje uživateli obnovit starší měřítko obrázků na displejích s vysokým rozlišením DPI, jejichž měřítko je nastaveno na více než 100%. Další informace najdete v zprávě k vydání verze rozhraní .NET Framework 4.8 na GitHubu.
V .NET Core a .NET 5.0 a novějších se přepínač Switch.System.Windows.Forms.UseLegacyImages
nepodporuje.
Představená verze
3.0
Doporučená akce
Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.
Kategorie
Windows Forms
Ovlivněná rozhraní API
- Žádný
Šablony About a SplashScreen jsou poškozené
Soubory About.vb
a SplashScreen.vb
vygenerované sadou Visual Studio obsahují odkazy na typy v oboru názvů My
, které nejsou k dispozici .NET Core 3.0 a 3.1.
Zavedená verze
3.0
Změnit popis
.NET Core 3.0 a 3.1 neobsahují úplnou podporu visual basicu My
. Referenční vlastnosti u šablon formulářů O a Úvodní obrazovka v sadě Visual Studio pro Windows Forms aplikace ve Visual Basicu odkazují na vlastnosti typu My.Application.Info
, které nejsou dostupné.
Doporučená akce
Podpora My
jazyka Visual Basic byla vylepšena v .NET 5, upgradujte projekt na .NET 5 nebo novější.
-nebo-
Opravte chyby kompilátoru v typech About a SplashScreen ve vaší aplikaci. Pomocí třídy System.Reflection.Assembly
získejte informace poskytované typem My.Application.Info
. Tady je k dispozici přímý port obou formulářů.
Spropitné
Toto je ukázkový kód a neoptimalizovaný. Seznam atributů by se měl ukládat do mezipaměti, aby se zkrátila doba načítání formuláře.
o
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
Splash screen
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
Kategorie
Visual Basic Windows Forms
Ovlivněná rozhraní API
Žádný
Typy v oboru názvů Microsoft.VisualBasic.ApplicationServices nejsou k dispozici.
Typy v oboru názvů Microsoft.VisualBasic.ApplicationServices nejsou k dispozici.
Představená verze
.NET Core 3.0
Změnit popis
Typy v oboru názvů Microsoft.VisualBasic.ApplicationServices byly k dispozici v rozhraní .NET Framework. Nejsou dostupné v .NET Core 3.0 – 3.1.
Typy byly odebrány, aby se zabránilo zbytečným závislostem sestavení nebo zásadním změnám v následujících verzích.
Doporučená akce
Tento obor názvů byl přidán v .NET 5, upgradujte projekt na .NET 5 nebo novější.
-nebo-
Pokud váš kód závisí na použití typů Microsoft.VisualBasic.ApplicationServices a jejich členů, můžete být schopni použít odpovídající typ nebo člen v knihovně tříd .NET. Některé členy System.Environment a System.Security.Principal.WindowsIdentity například poskytují ekvivalentní funkce vlastnostem třídy Microsoft.VisualBasic.ApplicationServices.User.
Kategorie
Visual Basic
Ovlivněná rozhraní API
Typy v oboru názvů Microsoft.VisualBasic.Devices nejsou k dispozici.
Typy v oboru názvů Microsoft.VisualBasic.Devices nejsou k dispozici.
Nově zavedená verze
.NET Core 3.0
Změnit popis
Typy v oboru názvů Microsoft.VisualBasic.Devices byly k dispozici v rozhraní .NET Framework. Nejsou dostupné v .NET Core 3.0 – 3.1.
Typy byly odebrány, aby se zabránilo zbytečným závislostem na sestavení nebo nekompatibilním změnám v následujících verzích.
Doporučená akce
Tento obor názvů byl přidán v .NET 5, upgradujte projekt na .NET 5 nebo novější.
-nebo-
Pokud váš kód závisí na použití typů Microsoft.VisualBasic.Devices a jejich členů, můžete být schopni použít odpovídající typ nebo člen v knihovně tříd .NET. Například ekvivalentní funkce třídy Microsoft.VisualBasic.Devices.Clock poskytuje typy System.DateTime a System.Environment a ekvivalentní funkce Microsoft.VisualBasic.Devices.Ports třídy jsou poskytovány typy v oboru názvů System.IO.Ports.
Kategorie
Visual Basic
Ovlivněná rozhraní API
Typy v oboru názvů Microsoft.VisualBasic.MyServices nejsou k dispozici.
Typy v oboru názvů Microsoft.VisualBasic.MyServices nejsou k dispozici.
Zavedená verze
.NET Core 3.0
Změnit popis
Typy v oboru názvů Microsoft.VisualBasic.MyServices byly k dispozici v rozhraní .NET Framework. Nejsou dostupné v .NET Core 3.0 – 3.1.
Typy byly odebrány, aby se zabránilo zbytečným závislostem sestavení nebo zlomovým změnám v následujících verzích.
Doporučená akce
Tento obor názvů byl přidán v .NET 5, upgradujte projekt na .NET 5 nebo novější.
-nebo-
Pokud váš kód závisí na použití typů a jejich členů z Microsoft.VisualBasic.MyServices, existují k nim odpovídající typy a členy v knihovně tříd .NET. Následuje mapování Microsoft.VisualBasic.MyServices typů k jejich ekvivalentním typům knihoven tříd .NET:
Typ Microsoft.VisualBasic.MyServices | Typ knihovny tříd .NET |
---|---|
ClipboardProxy | System.Windows.Clipboard pro aplikace WPF, System.Windows.Forms.Clipboard pro aplikace Windows Forms |
FileSystemProxy | Typy v jmenném prostoru System.IO |
RegistryProxy | Typy týkající se registru v prostoru názvů Microsoft.Win32 |
SpecialDirectoriesProxy | Environment.GetFolderPath |
Kategorie
Visual Basic