Zásadní změny migrace z rozhraní .NET Framework na .NET Core

Pokud migrujete aplikaci z rozhraní .NET Framework do .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. Tady se přidají nejdůležitější zásadní změny, když o nich víme.

Knihovny Core .NET

.NET 8

Odebere se rozhraní API IDispatchImplAttribute.

.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 truejejí výchozí hodnota .

Změna popisu

Process.Startumožňuje spustit aplikaci přímo, například s kódem, jako Process.Start("mspaint.exe") je spuštění Malování. Umožňuje také nepřímo spustit přidruženou aplikaci, pokud ProcessStartInfo.UseShellExecute je nastavena na true. V rozhraní .NET Framework je výchozí hodnota ProcessStartInfo.UseShellExecutetruepro , což znamená, že kód, jako Process.Start("mytextfile.txt") je spuštění 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 .false V .NET Core je výchozí hodnota pro ProcessStartInfo.UseShellExecutefalse. To znamená, že přidružené aplikace nejsou ve výchozím nastavení spuštěny při volání Process.Start.

Následující vlastnosti jsou funkční pouze v těchto truepřípadech ProcessStartInfo.UseShellExecuteSystem.Diagnostics.ProcessStartInfo:

Tato změna byla zavedena v .NET Core z důvodů výkonu. Process.Start Obvykle se používá 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 bylo toto 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 UseShellExecute se pro Windows neimplementoval.

Pokud vaše aplikace spoléhá na staré chování, zavolejte Process.Start(ProcessStartInfo) na objekt nastavený UseShellExecute na trueProcessStartInfo hodnotu.

Kategorie

Knihovny Core .NET

Ovlivněná rozhraní API


.NET Core 1.0

UnauthorizedAccessException vyvolán FileSystemInfo.Attributes

V .NET Core se vyvolá, UnauthorizedAccessException když se volající pokusí nastavit hodnotu atributu souboru, ale nemá oprávnění k zápisu.

Změna popisu

V rozhraní .NET Framework je vyvolán, ArgumentException když se volající pokusí nastavit hodnotu atributu souboru, FileSystemInfo.Attributes ale nemá oprávnění k zápisu. V .NET Core se místo toho vyvolá chyba UnauthorizedAccessException . (V .NET Core je stále vyvolán, ArgumentException pokud se volající pokusí nastavit neplatný atribut souboru.)

Zavedená verze

1.0

Podle potřeby upravte všechny catch příkazy tak, aby zachytály místo UnauthorizedAccessException nebo kromě něj .ArgumentException

Kategorie

Knihovny Core .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ěna popisu

Dříve bylo možné zachytit a zpracovat poškozené výjimky stavu procesu a zpracovávat obslužnými rutinami výjimek spravovaného kódu, například pomocí příkazu try-catch v jazyce C#.

Počínaje verzí .NET Core 1.0 nelze spravovaného kódu zpracovat poškozené výjimky stavu procesu. Modul CLR (Common Language Runtime) nedoručuje do spravovaného kódu poškozené výjimky stavu procesu.

Zavedená verze

1.0

Vyhněte se nutnosti zpracovávat poškozené výjimky stavu procesu tím, že řešíte situace, které k nim vedou. 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

Knihovny Core .NET

Ovlivněná rozhraní API


Vlastnosti nástroje UriBuilder už nemají předem připravené počáteční znaky.

UriBuilder.Fragment už nepředá úvodní # znak a UriBuilder.Query už nepředá úvodní ? znak, pokud už existuje.

Změna popisu

V rozhraní .NET Framework UriBuilder.Fragment a UriBuilder.Query vlastnosti vždy předložily # znak nebo ? znak na hodnotu, která se ukládá. Toto chování může vést k více # znakům ? v uložené hodnotě, pokud řetězec již obsahuje jeden z těchto úvodních znaků. Může se například stát ##mainhodnotou UriBuilder.Fragment .

Počínaje verzí .NET Core 1.0 už tyto vlastnosti nepředpokládají # uloženou hodnotu ani ? znaky, pokud je již na začátku řetězce.

Zavedená verze

1.0

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í náběr # ani ? 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 ????one=1&two=2&three=3&four=4výstup .
  • V .NET Core je ?one=1&two=2&three=3&four=4výstup .

Kategorie

Knihovny Core .NET

Ovlivněná rozhraní API


Process.StartInfo vyvolá výjimku InvalidOperationException pro procesy, které jste nespusili.

Process.StartInfo Čtení vlastnosti pro procesy, které váš kód nespustí, vyvolá chybu InvalidOperationException.

Změna popisu

V rozhraní .NET Framework se přístup k Process.StartInfo vlastnosti pro procesy, které váš kód nespustí, vrátí fiktivní ProcessStartInfo objekt. 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 Process.StartInfo vlastnost procesu, který jste nespusili (tj. voláním Process.Start), InvalidOperationException vyvolá se vyvolání.

Zavedená verze

1.0

Nepřistupujte k Process.StartInfo vlastnosti pro procesy, které váš kód nespusl. Například nečte tuto vlastnost pro procesy vrácené Process.GetProcesses.

Kategorie

Knihovny Core .NET

Ovlivněná rozhraní API


Kryptografie

.NET Core 2.1

Je respektován logický parametr SignedCms.ComputeSignature.

V .NET Core se respektuje logický silent parametr SignedCms.ComputeSignature(CmsSigner, Boolean) metody. Výzva k zadání kódu PIN se nezobrazí, pokud je tento parametr nastaven na truehodnotu .

Změna popisu

V rozhraní .NET Framework silent se parametr SignedCms.ComputeSignature(CmsSigner, Boolean) metody ignoruje a v případě potřeby poskytovatele se vždy zobrazí výzva k zadání kódu PIN. V .NET Core silent se parametr respektuje 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

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 falsehodnotu . Výsledné chování je stejné jako v rozhraní .NET Framework bez ohledu na to, jestli je v něm neaktivní kontext.

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 ve výchozím případě nástroj MSBuild vygeneruje pro soubory prostředků jiný název souboru manifestu.

Zavedená verze

3,0

Změna popisu

Před .NET Core 3.0, pokud nebyla zadána žádná LogicalNameManifestResourceName, nebo DependentUpon metadata pro EmbeddedResource položku v souboru projektu, nástroj MSBuild vygeneroval název souboru manifestu ve vzoru <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Pokud RootNamespace není v souboru projektu definováno, 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ů společně přidělený 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 ve vzoru <Namespace>.<ClassName>.resources. Obor názvů a název třídy se extrahují z prvního typu v spolulokovaném zdrojovém souboru. Například vygenerovaný název manifestu pro soubor prostředků s názvem Form1.resx , který je společně přidělený 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 LogicalName, ManifestResourceNamenebo DependentUpon metadata zadaná pro EmbeddedResource položku v souboru projektu, tato změna nemá vliv na tento soubor zdroje.

Tato změna způsobující chybu byla zavedena přidáním EmbeddedResourceUseDependentUponConvention vlastnosti do projektů .NET Core. Ve výchozím nastavení nejsou soubory prostředků explicitně uvedeny v souboru projektu .NET Core, takže nemají žádná DependentUpon metadata k určení, jak pojmenovat vygenerovaný soubor .resources . Pokud EmbeddedResourceUseDependentUponConvention je nastavena na true, což je výchozí, NÁSTROJ MSBuild vyhledá společnělokovaný zdrojový soubor a extrahuje obor názvů a název třídy z daného souboru. Pokud nastavíte EmbeddedResourceUseDependentUponConvention hodnotu false, nástroj MSBuild vygeneruje název manifestu podle předchozího chování, které kombinuje RootNamespace a relativní cestu k souboru.

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é zásady vytváření názvů nastavením EmbeddedResourceUseDependentUponConvention v false souboru projektu.

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

Kategorie

MSBuild

Ovlivněná rozhraní API


Sítě

.NET Core 2.0

WebClient.CancelAsync se vždy nezruší okamžitě.

Od verze .NET Core 2.0 volání nezruší požadavek okamžitě, WebClient.CancelAsync() pokud se odpověď začala načítat.

Změna popisu

Dříve volání WebClient.CancelAsync() zrušilo žádost okamžitě. Od verze .NET Core 2.0 volání WebClient.CancelAsync() zruší požadavek okamžitě jenom v případě, že odpověď nezačala načítat. 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 WebClient rozhraní API je zastaralé ve prospěch HttpClient.

Zavedená verze

2.0

System.Net.Http.HttpClient Místo třídySystem.Net.WebClient, která je zastaralá, použijte.

Kategorie

Sítě

Ovlivněná rozhraní API


Windows Forms

model Windows Forms podpora byla přidána do .NET Core ve verzi 3.0. Pokud migrujete aplikaci model Windows Forms z rozhraní .NET Framework na .NET Core, můžou zásadní změny uvedené tady ovlivnit vaši aplikaci.

.NET Core 3.1

Odebrané ovládací prvky

Počínaje verzí .NET Core 3.1 už některé ovládací prvky model Windows Forms nejsou k dispozici.

Změna popisu

Od verze .NET Core 3.1 už nejsou k dispozici různé ovládací prvky model 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:

Zavedená verze

3.1

Každý odebraný ovládací prvek má doporučený náhradní ovládací prvek. Informace najdete v následující tabulce:

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
Mainmenu MenuStrip
Nabídka ToolStripDropDown, ToolStripDropDownMenu MenuItemCollection
MenuItem Toolstripmenuitem
ToolBar ToolStrip ToolBarAppearance
Toolbarbutton Toolstripbutton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategorie

Windows Forms

Ovlivněná rozhraní API


Událost CellFormatting se nevyvolá, pokud je zobrazen popis

Při DataGridView najetí myší myší a po výběru pomocí klávesnice se teď zobrazí popisy textu a chyby buňky. Pokud se zobrazí popis, DataGridView.CellFormatting událost se nevyvolá.

Změna popisu

Před .NET Core 3.1, DataGridView který měl nastavenou ShowCellToolTips vlastnost true zobrazovat popis textu buňky a chyby při najetí myší na buňku. Popisy nebyly zobrazeny, když byla buňka vybrána pomocí klávesnice (například pomocí klávesy Tab, klávesových zkratek nebo navigace se šipkami). Pokud uživatel upravil buňku a potom, i když DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou ToolTipText vlastnost, CellFormatting byla vyvolána událost, která naformátuje text buňky pro zobrazení v buňce.

Pro splnění standardů přístupnosti počínaje rozhraním .NET Core 3.1, která má vlastnost nastavenou ShowCellToolTips tak, DataGridView aby true zobrazovala popisy textu buňky a chyby nejen v případě, že je buňka najetá myší, ale také když je vybraná přes klávesnici. V důsledku této změny není událost vyvolána, pokud buňky, CellFormatting které nemají nastavenou ToolTipText vlastnost, jsou najet myší, když DataGridView je 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

Refaktoring libovolného CellFormatting kódu, který závisí na události, když DataGridView je v režimu úprav.

Kategorie

Windows Forms

Ovlivněná rozhraní API

Nic


.NET Core 3.0

Výchozí písmo ovládacího prvku se změnilo na Segoe UI 9 pt

Změna popisu

V rozhraní .NET Framework Control.DefaultFont byla vlastnost nastavena na Microsoft Sans Serif 8 pthodnotu . Následující obrázek znázorňuje okno, které používá výchozí písmo.

Default control font in .NET Framework

Počínaje verzí .NET Core 3.0 je výchozí písmo nastavené 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 se zohlednila větší velikost nového výchozího písma. Příklad:

Default control font in .NET Core

Tato změna byla provedena tak, aby odpovídala pokynům pro uživatelské prostředí windows.

Zavedená verze

3,0

Vzhledem ke změně velikosti formulářů a ovládacích prvků se ujistěte, že se aplikace správně vykresluje.

Pokud chcete zachovat původní písmo, nastavte výchozí písmo formuláře na Microsoft Sans Serif 8 pthodnotu . Příklad:

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

Kategorie

  • Windows Forms

Ovlivněná rozhraní API

Nezaokrouhlovat.


Modernizace složkyBrowserDialog

Ovládací FolderBrowserDialog prvek se v model Windows Forms aplikacích pro .NET Core změnil.

Změna popisu

V rozhraní .NET Framework používá windows forms pro FolderBrowserDialog ovládací prvek následující dialog:

The FolderBrowserDialogControl in the .NET Framework

V rozhraní .NET Core 3.0 používá model Windows Forms novější ovládací prvek založený na modelu COM, který byl zaveden v systému Windows Vista:

The FolderBrowserDialogControl in the .NET Core

Zavedená verze

3,0

Dialogové okno se automaticky upgraduje.

Pokud chcete zachovat původní dialogové okno, nastavte FolderBrowserDialog.AutoUpgradeEnabled vlastnost před false zobrazením dialogového okna, jak je znázorněno následujícím fragmentem 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ů model Windows Forms

Byl SerializableAttribute odebrán z některých model Windows Forms tříd, které nemají žádné známé binární serializace scénáře.

Změna popisu

Následující typy jsou zdobené SerializableAttribute v rozhraní .NET Framework, ale atribut byl odebrán v .NET Core:

Tento mechanismus serializace má v minulosti vážné obavy ohledně údržby a zabezpečení. Údržba SerializableAttribute typů znamená, že tyto typy musí být testovány na změny serializace verze na verzi a potenciálně změny serializace architektury na architekturu. 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 tématu Binární serializace.

Zavedená verze

3,0

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

  • Nic

Přepínač kompatibility AllowUpdateChildControlIndexForTabControls se nepodporuje.

Přepínač Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibility je podporován v model 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ěna popisu

V rozhraní .NET Framework 4.6 a novějších verzích se při výběru karty změní pořadí kolekce ovládacích prvků. Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls Přepínač kompatibility umožňuje aplikaci přeskočit toto změny pořadí, pokud je toto chování nežádoucí.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility DomainUpDown.UseLegacyScrolling se nepodporuje.

Přepínač Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.1, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.7.1 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling umožňuje přechod na kompatibilitu vývojářům vyjádřit nesouhlas s nezávislými DomainUpDown.DownButton() akcemi a DomainUpDown.UpButton() akcemi. Přepínač obnovil starší verzi chování, ve kterém DomainUpDown.UpButton() se ignoruje, pokud je kontextový text k dispozici, a vývojář musí použít DomainUpDown.DownButton() akci na ovládacím prvku před DomainUpDown.UpButton() akcí. Další informace naleznete v tématu <AppContextSwitchOverrides> element.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling se přepínač nepodporuje.

Zavedená verze

3,0

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č Switch.System.Windows.Forms.UseLegacyImages kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.1, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

V rozhraní .NET Framework 4.6.2 a předchozích verzích RichTextBox ovládací prvek Win32 RichEdit v3.0 a pro aplikace, které cílí na rozhraní .NET Framework 4.7.1, RichTextBox vytvoří instance ovládacího prvku RichEdit v4.1 (v msftedit.dll). Přepínač kompatibility byl zaveden tak Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl , 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 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl se přepínač nepodporuje. Podporují se jenom nové verze RichTextBox ovládacího prvku.

Zavedená verze

3,0

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 DoNotSupportSelectAllShortcutInMultilineTextBox

Přepínač Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibility, který byl zaveden v rozhraní .NET Framework 4.6.1, není podporován v model Windows Forms v .NET Core a .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.6.1 vyberte klávesovou zkratku Ctrl + A v ovládacím TextBox prvku vybraný veškerý text. V rozhraní .NET Framework 4.6 a předchozích verzích se po výběru klávesové zkratky Ctrl + A nepodařilo se vybrat veškerý text, pokud byla vlastnost Textbox.ShortcutsEnabled a TextBox.Multiline vlastnosti nastaveny na .true Přepínač Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibility byl zaveden v rozhraní .NET Framework 4.6.1, aby se zachovalo původní chování. Další informace najdete tady: TextBox.ProcessCmdKey.

V .NET Core a .NET 5.0 a novějších verzích Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility DontSupportReentrantFilterMessage není podporován.

Přepínač Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibility, který byl zaveden v rozhraní .NET Framework 4.6.1, není podporován v model Windows Forms v .NET Core a .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.6.1 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage řeší přepínač kompatibility možné IndexOutOfRangeException výjimky při Application.FilterMessage zavolání zprávy s vlastní IMessageFilter.PreFilterMessage implementací. Další informace naleznete v tématu Zmírnění: Vlastní IMessageFilter.PreFilterMessage Implementace.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.DontSupportReentrantFilterMessage se přepínač nepodporuje.

Zavedená verze

3,0

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 se nepodporuje.

Přepínač Switch.System.Windows.Forms.EnableVisualStyleValidation kompatibility není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novějších.

Změna popisu

V rozhraní .NET Framework Switch.System.Windows.Forms.EnableVisualStyleValidation přepínač kompatibility povolil aplikaci vyjádřit nesouhlas s ověřováním stylů vizuálů zadaných v číselném formátu.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.EnableVisualStyleValidation se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Přepínač kompatibility UseLegacyContextMenuStripSourceControlValue se nepodporuje.

Přepínač Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibility, který byl zaveden v rozhraní .NET Framework 4.7.2, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.7.2 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue umožňuje vývojáři vyjádřit nesouhlas s novým chováním ContextMenuStrip.SourceControl vlastnosti, která nyní vrací odkaz na správu zdrojového kódu. Předchozí chování vlastnosti bylo vráceno null. Další informace naleznete v tématu <AppContextSwitchOverrides> element.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue se přepínač nepodporuje.

Zavedená verze

3,0

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č Switch.System.Windows.Forms.UseLegacyImages kompatibility, který byl zaveden v rozhraní .NET Framework 4.8, není podporován v model Windows Forms v .NET Core nebo .NET 5.0 a novější.

Změna popisu

Počínaje rozhraním .NET Framework 4.8 Switch.System.Windows.Forms.UseLegacyImages vyřešil přepínač kompatibility 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 tato možnost nastavená true, umožňuje uživateli obnovit starší měřítko image na displejích s vysokým rozlišením DPI, jejichž měřítko je nastaveno na větší než 100 %. Další informace najdete v poznámkách k verzi rozhraní .NET Framework 4.8 na GitHubu.

V .NET Core a .NET 5.0 a novějších Switch.System.Windows.Forms.UseLegacyImages se přepínač nepodporuje.

Zavedená verze

3,0

Odeberte přepínač. Přepínač není podporovaný a není k dispozici žádná alternativní funkce.

Kategorie

Windows Forms

Ovlivněná rozhraní API

  • Nic

Šablony About a SplashScreen jsou poškozené

SplashScreen.vb Soubory About.vb generované sadou Visual Studio obsahují odkazy na typy v My oboru názvů, které nejsou k dispozici .NET Core 3.0 a 3.1.

Zavedená verze

3,0

Změna popisu

.NET Core 3.0 a 3.1 neobsahují úplnou podporu jazyka Visual Basic My . Šablony formulářů About a SplashScreen v sadě Visual Studio pro Visual Basic model Windows Forms referenční vlastnosti aplikací v My.Application.Info typu, který není k dispozici.

Podpora jazyka Visual Basic My byla vylepšena v .NET 5, upgradujte projekt na .NET 5 nebo novější.

nebo

Opravte chyby kompilátoru v typech About a SplashScreen v aplikaci. System.Reflection.Assembly Pomocí třídy získáte informace poskytované typemMy.Application.Info. Tady je k dispozici přímý port obou formulářů.

Tip

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 uživateli

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

Úvodní obrazovka

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 model Windows Forms

Ovlivněná rozhraní API

Nic


Typy v oboru názvů Microsoft.VisualBasic.ApplicationServices nejsou k dispozici.

Typy v Microsoft.VisualBasic.ApplicationServices oboru názvů nejsou k dispozici.

Zavedená verze

.NET Core 3.0

Změna popisu

Typy v Microsoft.VisualBasic.ApplicationServices oboru názvů 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.

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í Microsoft.VisualBasic.ApplicationServices typů a jejich členů, můžete v knihovně tříd .NET použít odpovídající typ nebo člena. Někteří System.Environment členové System.Security.Principal.WindowsIdentity například poskytují ekvivalentní funkce vlastnostem Microsoft.VisualBasic.ApplicationServices.User třídy.

Kategorie

Visual Basic

Ovlivněná rozhraní API


Typy v oboru názvů Microsoft.VisualBasic.Devices nejsou k dispozici.

Typy v Microsoft.VisualBasic.Devices oboru názvů nejsou k dispozici.

Zavedená verze

.NET Core 3.0

Změna popisu

Typy v Microsoft.VisualBasic.Devices oboru názvů 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.

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í Microsoft.VisualBasic.Devices typů a jejich členů, můžete v knihovně tříd .NET použít odpovídající typ nebo člena. Například ekvivalentní funkce třídy Microsoft.VisualBasic.Devices.Clock jsou poskytovány typy System.EnvironmentSystem.DateTime a ekvivalentní funkce třídy jsou poskytovány Microsoft.VisualBasic.Devices.Ports typy v System.IO.Ports oboru názvů.

Kategorie

Visual Basic

Ovlivněná rozhraní API


Typy v oboru názvů Microsoft.VisualBasic.MyServices nejsou k dispozici.

Typy v Microsoft.VisualBasic.MyServices oboru názvů nejsou k dispozici.

Zavedená verze

.NET Core 3.0

Změna popisu

Typy v Microsoft.VisualBasic.MyServices oboru názvů 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.

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.MyServices a jejich členů, jsou v knihovně tříd .NET odpovídající typy a členy. Následuje mapování typů Microsoft.VisualBasic.MyServices na ekvivalentní typy knihoven tříd .NET:

Typ Microsoft.VisualBasic.MyServices Typ knihovny tříd .NET
ClipboardProxy System.Windows.Clipboardpro aplikace System.Windows.Forms.Clipboard WPF pro model Windows Forms aplikace
FileSystemProxy Typy v System.IO oboru názvů
RegistryProxy Typy související s registrem Microsoft.Win32 v oboru názvů
SpecialDirectoriesProxy Environment.GetFolderPath

Kategorie

Visual Basic

Ovlivněná rozhraní API


Viz také