Delen via


Belangrijke wijzigingen voor migratie van .NET Framework naar .NET Core

Als u een app migreert van .NET Framework naar .NET Core-versies 1.0 tot en met 3.1, kunnen de belangrijke wijzigingen in dit artikel van invloed zijn op u. Belangrijke wijzigingen worden gegroepeerd op categorie en binnen deze categorieën, op basis van de versie van .NET Core waarin ze zijn geïntroduceerd.

Notitie

Dit artikel is geen volledige lijst met belangrijke wijzigingen tussen .NET Framework en .NET Core. De belangrijkste ingrijpende wijzigingen worden hier toegevoegd zodra we hiervan op de hoogte zijn.

Core .NET-bibliotheken

.NET 8

IDispatchImplAttribute-API wordt verwijderd

.NET Core 2.1

De standaardwaarde van UseShellExecute wijzigen

ProcessStartInfo.UseShellExecute heeft een standaardwaarde van false op .NET Core. In .NET Framework is de standaardwaarde true.

Beschrijving wijzigen

Process.Start kunt u een toepassing rechtstreeks starten, bijvoorbeeld met code zoals Process.Start("mspaint.exe") waarmee Paint wordt gestart. Hiermee kunt u ook indirect een gekoppelde toepassing starten als ProcessStartInfo.UseShellExecute is ingesteld op true. In .NET Framework is de standaardwaarde voor ProcessStartInfo.UseShellExecutetrue, wat betekent dat code zoals Process.Start("mytextfile.txt") Kladblok zou starten als u .txt bestanden aan die editor hebt gekoppeld. Als u wilt voorkomen dat een app indirect wordt gestart in .NET Framework, moet u expliciet ProcessStartInfo.UseShellExecute instellen op false. In .NET Core is de standaardwaarde voor ProcessStartInfo.UseShellExecutefalse. Dit betekent dat gekoppelde toepassingen standaard niet worden gestart wanneer u Process.Startaanroept.

De volgende eigenschappen op System.Diagnostics.ProcessStartInfo zijn alleen functioneel wanneer ProcessStartInfo.UseShellExecute is true:

Deze wijziging is geïntroduceerd in .NET Core om prestatieredenen te verbeteren. Doorgaans wordt Process.Start gebruikt om een toepassing rechtstreeks te starten. Het starten van een app hoeft niet rechtstreeks de Windows-shell te omvatten en de bijbehorende prestatiekosten in rekening te brengen. Om deze standaardcase sneller te maken, wijzigt .NET Core de standaardwaarde van ProcessStartInfo.UseShellExecute in false. U kunt zich aanmelden voor het langzamere pad als u dit nodig hebt.

Versie geïntroduceerd

2.1

Notitie

In eerdere versies van .NET Core is UseShellExecute niet geïmplementeerd voor Windows.

Als uw app afhankelijk is van het oude gedrag, roept u Process.Start(ProcessStartInfo) aan met UseShellExecute ingesteld op true op het ProcessStartInfo-object.

Categorie

Core .NET-bibliotheken

Betrokken API's


.NET Core 1.0

UnauthorizedAccessException gegenereerd door FileSystemInfo.Attributes

In .NET Core wordt een UnauthorizedAccessException gegenereerd wanneer de aanroeper probeert een waarde voor het bestandskenmerk in te stellen, maar geen schrijfmachtiging heeft.

Beschrijving wijzigen

In .NET Framework wordt een ArgumentException gegenereerd wanneer de aanroeper probeert een waarde voor het bestandskenmerk in te stellen in FileSystemInfo.Attributes, maar geen schrijfmachtiging heeft. In .NET Core wordt in plaats daarvan een UnauthorizedAccessException gegenereerd. (In .NET Core wordt er nog steeds een ArgumentException gegenereerd als de aanroeper probeert een ongeldig bestandskenmerk in te stellen.)

Versie geïntroduceerd

1.0

Wijzig alle catch instructies om een UnauthorizedAccessException te vangen in plaats van, of naast, een ArgumentException, indien nodig.

Categorie

Core .NET-bibliotheken

Betrokken API's


Het verwerken van beschadigde status-uitzonderingen wordt niet ondersteund

Het verwerken van beschadigde processtatus-uitzonderingen in .NET Core wordt niet ondersteund.

Beschrijving wijzigen

Voorheen konden beschadigde processtatusuitzonderingen worden opgevangen en verwerkt door beheerde codeuitzonderingshandlers, bijvoorbeeld met behulp van een try-catch-instructie in C#.

Vanaf .NET Core 1.0 kunnen beschadigde processtatusuitzondering niet worden verwerkt door beheerde code. De algemene taalruntime levert geen uitzonderingen voor beschadigde processtatus aan beheerde code.

Ingevoerde versie

1.0

Vermijd de noodzaak om corrupte processtatus-uitzonderingen af te handelen door in plaats daarvan de oorzaken van deze situaties aan te pakken. Als het absoluut noodzakelijk is om beschadigde processtatusuitzondering af te handelen, schrijft u de uitzonderingshandler in C- of C++-code.

Categorie

Core .NET-bibliotheken

Getroffen API's


UriBuilder-eigenschappen voegen voortaan geen voorlooptekens meer toe

UriBuilder.Fragment zet niet langer een voorloopteken # voor en UriBuilder.Query zet geen voorloopteken ? meer voor wanneer er al een voorloopteken aanwezig is.

Beschrijving wijzigen

In .NET Framework hebben de eigenschappen UriBuilder.Fragment en UriBuilder.Query altijd een # of ? teken voor de waarde die wordt opgeslagen. Dit gedrag kan leiden tot meerdere # of ? tekens in de opgeslagen waarde als de tekenreeks al een van deze voorlooptekens bevat. De waarde van UriBuilder.Fragment kan bijvoorbeeld ##mainworden.

Vanaf .NET Core 1.0 worden de #- of ?-tekens niet meer toegevoegd aan het begin van de opgeslagen waarde als deze al aan het begin van de tekenreeks aanwezig zijn.

Versie geïntroduceerd

1.0

U hoeft deze voorlooptekens niet langer expliciet te verwijderen bij het instellen van de eigenschapswaarden. Dit is vooral handig wanneer u waarden toevoegt, omdat u de voorloop-# of ? niet meer hoeft te verwijderen telkens wanneer u toevoegt.

In het volgende codefragment ziet u bijvoorbeeld het gedragsverschil tussen .NET Framework en .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);
  • In het .NET Framework is de uitvoer ????one=1&two=2&three=3&four=4.
  • In .NET Core is de uitvoer ?one=1&two=2&three=3&four=4.

Categorie

Core .NET-bibliotheken

Getroffen API's


Process.StartInfo genereert InvalidOperationException voor processen die u niet hebt gestart

Het lezen van de eigenschap Process.StartInfo voor processen die uw code niet heeft gestart, genereert een InvalidOperationException.

Beschrijving wijzigen

In .NET Framework retourneert het openen van de eigenschap Process.StartInfo voor processen die uw code niet heeft gestart een dummy-ProcessStartInfo-object. Het dummy-object bevat standaardwaarden voor alle eigenschappen, behalve EnvironmentVariables.

Als u vanaf .NET Core 1.0 de eigenschap Process.StartInfo leest voor een proces dat u niet hebt gestart (door Process.Startaan te roepen), wordt er een InvalidOperationException gegenereerd.

Ingevoerde versie

1.0

Open de eigenschap Process.StartInfo niet voor processen die uw code niet heeft gestart. Lees deze eigenschap bijvoorbeeld niet voor processen die worden geretourneerd door Process.GetProcesses.

Categorie

Core .NET-bibliotheken

Getroffen API's


Cryptografie

.NET Core 2.1

Booleaanse parameter van SignedCms.ComputeSignature wordt gerespecteerd

In .NET Core wordt de Booleaanse silent parameter van de methode SignedCms.ComputeSignature(CmsSigner, Boolean) gerespecteerd. Er wordt geen pincodeprompt weergegeven als deze parameter is ingesteld op true.

Beschrijving wijzigen

In .NET Framework wordt de parameter silent van de methode SignedCms.ComputeSignature(CmsSigner, Boolean) genegeerd en wordt er altijd een pincodeprompt weergegeven indien vereist door de provider. In .NET Core wordt de parameter silent gerespecteerd en als deze is ingesteld op true, wordt er nooit een pincodeprompt weergegeven, zelfs als deze is vereist door de provider.

Ondersteuning voor CMS/PKCS #7-berichten is geïntroduceerd in .NET Core in versie 2.1.

Geïntroduceerde versie

2.1

Om ervoor te zorgen dat een pincodeprompt indien nodig wordt weergegeven, moeten bureaubladtoepassingen SignedCms.ComputeSignature(CmsSigner, Boolean) aanroepen en de Booleaanse parameter instellen op false. Het resulterende gedrag is hetzelfde als in .NET Framework, ongeacht of de achtergrondcontext daar is uitgeschakeld.

Categorie

Cryptografie

Betrokken API's


MSBuild

.NET Core 3.0

Naam van resourcemanifestbestand wijzigen

Vanaf .NET Core 3.0 genereert MSBuild in het standaardscenario een andere manifestbestandsnaam voor resourcebestanden.

Versie geïntroduceerd

3.0

Beschrijving wijzigen

Vóór .NET Core 3.0, als er geen LogicalName, ManifestResourceNameof DependentUpon metagegevens zijn opgegeven voor een EmbeddedResource item in het projectbestand, heeft MSBuild een manifestbestandsnaam gegenereerd in het patroon <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Als RootNamespace niet is gedefinieerd in het projectbestand, wordt standaard de projectnaam gebruikt. De gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx in de hoofdmap van het project is bijvoorbeeld MyProject.Form1.resources.

Vanaf .NET Core 3.0 wordt in MSBuild typegegevens uit het bronbestand gebruikt om de manifestbestandsnaam in het patroon <Namespace>.<ClassName>.resourceste genereren, als een resourcebestand is geplaatst met een bronbestand met dezelfde naam (bijvoorbeeld Form1.resx en Form1.cs). De namespace en klassenaam worden geëxtraheerd uit het eerste type in het gecolloceerde bronbestand. De gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx dat is gekoppeld aan een bronbestand met de naam Form1.cs is MyNamespace.Form1.resources. Het belangrijkste om op te merken is dat het eerste deel van de bestandsnaam verschilt van eerdere versies van .NET Core (MyNamespace in plaats van MyProject).

Notitie

Als u LogicalName, ManifestResourceNameof DependentUpon metagegevens hebt opgegeven voor een EmbeddedResource item in het projectbestand, heeft deze wijziging geen invloed op dat resourcebestand.

Deze belangrijke wijziging is geïntroduceerd met de toevoeging van de eigenschap EmbeddedResourceUseDependentUponConvention aan .NET Core-projecten. Resourcebestanden worden standaard niet expliciet vermeld in een .NET Core-projectbestand, zodat ze geen DependentUpon metagegevens hebben om op te geven hoe de gegenereerde .resources bestand een naam moet geven. Wanneer EmbeddedResourceUseDependentUponConvention is ingesteld op true, wat de standaardinstelling is, zoekt MSBuild naar een gelokaliseerd bronbestand en extraheert een naamruimte en een klassennaam uit dat bestand. Als u EmbeddedResourceUseDependentUponConvention instelt op false, genereert MSBuild de manifestnaam volgens het vorige gedrag, dat RootNamespace en het relatieve bestandspad combineert.

In de meeste gevallen is er geen actie vereist voor de ontwikkelaar en moet uw app blijven werken. Als deze wijziging uw app echter onderbreekt, kunt u het volgende doen:

  • Wijzig de code om de naam van het nieuwe manifest te verwachten.

  • Meld u af voor de nieuwe naamconventie door EmbeddedResourceUseDependentUponConvention in te stellen op false in uw projectbestand.

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

Categorie

MSBuild

Getroffen API's

N.V.T


Netwerken

.NET Core 2.0

WebClient.CancelAsync annuleert niet altijd onmiddellijk

Vanaf .NET Core 2.0 annuleert het aanroepen van WebClient.CancelAsync() de aanvraag niet onmiddellijk als het antwoord is begonnen met ophalen.

Beschrijving wijzigen

Voorheen werd door WebClient.CancelAsync() te bellen de aanvraag onmiddellijk geannuleerd. Vanaf .NET Core 2.0, annuleert het aanroepen van WebClient.CancelAsync() de aanvraag onmiddellijk, maar alleen als het antwoord nog niet is begonnen met ophalen. Als het antwoord begonnen is met ophalen, wordt het verzoek pas geannuleerd nadat een volledig antwoord is gelezen.

Deze wijziging is geïmplementeerd omdat de WebClient-API is afgeschaft ten gunste van HttpClient.

Geïntroduceerde versie

2.0

Gebruik de System.Net.Http.HttpClient-klasse in plaats van System.Net.WebClient, die is afgeschaft.

Categorie

Netwerken

Geraakte API's


Windows Forms

Windows Forms-ondersteuning is toegevoegd aan .NET Core in versie 3.0. Als u een Windows Forms-app migreert van .NET Framework naar .NET Core, kunnen de belangrijke wijzigingen die hier worden vermeld, van invloed zijn op uw app.

.NET Core 3.1

Verwijderde controlemechanismen

Vanaf .NET Core 3.1 zijn sommige Besturingselementen voor Windows Forms niet meer beschikbaar.

Beschrijving wijzigen

Vanaf .NET Core 3.1 zijn verschillende Besturingselementen voor Windows Forms niet meer beschikbaar. Vervangende besturingselementen die beter ontworpen zijn en betere ondersteuning bieden, zijn geïntroduceerd in .NET Framework 2.0. De verouderde componenten zijn eerder verwijderd uit ontwerpgereedschappen, maar waren nog steeds beschikbaar om te gebruiken.

De volgende typen zijn niet meer beschikbaar:

Versie geïntroduceerd

3.1

Elk verwijderd besturingselement heeft een aanbevolen vervangend besturingselement. Raadpleeg de volgende tabel:

Verwijderd controle-element (API) Aanbevolen vervanging Gekoppelde API's die worden verwijderd
Contextmenu ContextmenuStrip
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Hoofdmenu MenuStrip
Menu ToolStripDropDown, ToolStripDropDownMenu CollectieMenuItems
Menu-item ToolStripMenuItem
Werkbalk Werkbalk WerkbalkWeergave
Werkbalkknop ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Categorie

Windows Forms

Beïnvloede API's


De gebeurtenis CellFormatting wordt niet gegenereerd als een tooltip wordt weergegeven

In een DataGridView worden nu de tekst- en foutmeldingen van een cel weergegeven wanneer de muis erover beweegt en wanneer deze via het toetsenbord is geselecteerd. Als er een tooltip wordt weergegeven, wordt de gebeurtenis DataGridView.CellFormatting niet gegenereerd.

Beschrijving wijzigen

Vóór .NET Core 3.1 toonde een DataGridView, waarop de eigenschap ShowCellToolTips was ingesteld op true, een knopinfo voor de tekst en eventuele fouten van een cel wanneer de muisaanwijzer boven de cel zweefde. Tooltips werden niet getoond wanneer een cel via het toetsenbord was geselecteerd (bijvoorbeeld met de Tab-toets, de sneltoetsen of pijlnavigatie). Als de gebruiker een cel bewerkte en de DataGridView zich nog in de bewerkingsmodus bevond, werd er over een cel bewogen waarvoor de eigenschap ToolTipText niet was ingesteld, en werd er een CellFormatting-gebeurtenis gegenereerd om de tekst van de cel op te maken voor weergave in de cel.

Om te voldoen aan toegankelijkheidsnormen, begint met .NET Core 3.1 een DataGridView, waarvan de eigenschap ShowCellToolTips is ingesteld op true, knopinfo weer te geven voor de tekst en fouten van een cel, niet alleen wanneer de cel wordt aangewezen, maar ook wanneer de cel is geselecteerd via het toetsenbord. Als gevolg van deze wijziging wordt de CellFormatting gebeurtenis niet gegenereerd wanneer cellen met de eigenschapsset ToolTipText niet worden geplaatst terwijl de DataGridView zich in de bewerkingsmodus bevindt. De gebeurtenis wordt niet gegenereerd omdat de inhoud van de zwevende cel wordt weergegeven als knopinfo in plaats van in de cel te worden weergegeven.

Versie geïntroduceerd

3.1

Herstructureer alle code die afhankelijk is van de CellFormatting gebeurtenis terwijl de DataGridView zich in de bewerkingsmodus bevindt.

Categorie

Windows Forms

Betrokken API's

Geen


.NET Core 3.0

Standaardlettertype voor besturingselementen gewijzigd in Segoe UI 9 pt

Beschrijving wijzigen

In .NET Framework is de eigenschap Control.DefaultFont ingesteld op Microsoft Sans Serif 8.25 pt. In de volgende afbeelding ziet u een venster waarin het standaardlettertype wordt gebruikt.

standaardlettertype voor UI-elementen in .NET Framework

Vanaf .NET Core 3.0 is het standaardlettertype ingesteld op Segoe UI 9 pt (hetzelfde lettertype als SystemFonts.MessageBoxFont). Als gevolg van deze wijziging zijn formulieren en besturingselementen ongeveer 27% groter om rekening te houden met de grotere grootte van het nieuwe standaardlettertype. Bijvoorbeeld:

standaard lettertype voor controle-elementen in .NET Core

Deze wijziging is aangebracht in overeenstemming met UX-richtlijnen (Windows-gebruikerservaring).

Versie geïntroduceerd

3.0

Vanwege de wijziging in de grootte van formulieren en besturingselementen moet u ervoor zorgen dat uw toepassing correct wordt weergegeven.

Als u het oorspronkelijke lettertype voor één formulier wilt behouden, stelt u het standaardlettertype in op Microsoft Sans Serif 8.25 pt. Bijvoorbeeld:

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

U kunt ook het standaardlettertype voor een hele toepassing op een van de volgende manieren wijzigen:

  • Door de eigenschap ApplicationDefaultFont MSBuild in te stellen op 'Microsoft Sans Serif, 8.25pt'. Dit is de voorkeurstechniek omdat Visual Studio de nieuwe instellingen in de ontwerpfunctie kan gebruiken.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Door Application.SetDefaultFont(Font)aan te roepen.

    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());
        }
    }
    

Categorie

  • Windows Forms

Getroffen API's

Geen.


Modernisering van de FolderBrowserDialog

Het besturingselement FolderBrowserDialog is gewijzigd in Windows Forms-toepassingen voor .NET Core.

Beschrijving wijzigen

In het .NET Framework wordt in Windows-formulieren het volgende dialoogvenster gebruikt voor het besturingselement FolderBrowserDialog.

FolderBrowserDialogControl in de .NET Framework-

In .NET Core 3.0 maakt Windows Forms gebruik van een nieuwere COM-besturingselement dat is geïntroduceerd in Windows Vista:

FolderBrowserDialogControl in de .NET Core-

Versie gelanceerd

3.0

Het dialoogvenster wordt automatisch bijgewerkt.

Als u het oorspronkelijke dialoogvenster wilt behouden, stelt u de eigenschap FolderBrowserDialog.AutoUpgradeEnabled in op false voordat u het dialoogvenster weergeeft, zoals wordt geïllustreerd door het volgende codefragment:

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

Categorie

Windows Forms

Betrokken API's


SerializableAttribute verwijderd uit sommige Windows Forms-typen

De SerializableAttribute is verwijderd uit sommige Windows Forms-klassen die geen bekende binaire serialisatiescenario's hebben.

Beschrijving wijzigen

De volgende typen zijn versierd met de SerializableAttribute in .NET Framework, maar zijn verwijderd in .NET Core.

Dit serialisatiemechanisme heeft in het verleden ernstige onderhouds- en beveiligingsproblemen gehad. Het handhaven van SerializableAttribute op typen betekent dat deze typen moeten worden getest op serialisatiewijzigingen tussen versies en mogelijk wijzigingen in serialisatie tussen frameworks. Dit maakt het moeilijker om deze typen te ontwikkelen en kan kostbaar zijn om te onderhouden. Deze typen hebben geen bekende binaire serialisatiescenario's, waardoor de impact van het verwijderen van het kenmerk wordt geminimaliseerd.

Zie Binaire serialisatievoor meer informatie.

Versie geïntroduceerd

3.0

Werk alle code bij die afhankelijk kan zijn van deze typen die als serialiseerbaar worden gemarkeerd.

Categorie

Windows Forms

Getroffen API's

  • Geen

Compatibiliteitsswitch AllowUpdateChildControlIndexForTabControls wordt niet ondersteund

De Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls compatibiliteitsswitch wordt ondersteund in Windows Forms op .NET Framework 4.6 en nieuwere versies, maar wordt niet ondersteund op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

Als u in .NET Framework 4.6 en hoger een tabblad selecteert, wordt de verzameling van besturingselementen opnieuw gerangschikt. Met de Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls compatibiliteitsswitch kan een toepassing deze volgorde overslaan wanneer dit gedrag ongewenst is.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls-switch niet ondersteund.

Versie uitgebracht

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Getroffen API's

  • Geen

Compatibiliteitsswitch DomainUpDown.UseLegacyScrolling wordt niet ondersteund

De Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.7.1, wordt niet ondersteund in Windows Forms op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

Vanaf .NET Framework 4.7.1 heeft de Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling compatibiliteitsswitch ontwikkelaars toegestaan om onafhankelijke DomainUpDown.DownButton()- en DomainUpDown.UpButton() acties uit te schakelen. De schakelaar heeft het verouderde gedrag hersteld, waarbij de DomainUpDown.UpButton() wordt genegeerd als er contexttekst aanwezig is en moet de ontwikkelaar de DomainUpDown.DownButton()-actie op het besturingselement uitvoeren vóór de DomainUpDown.UpButton()-actie. Zie <AppContextSwitchOverrides> elementvoor meer informatie.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling-switch niet ondersteund.

Ingevoerde versie

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Betrokken API's


Compatibiliteitsswitch DoNotLoadLatestRichEditControl wordt niet ondersteund

De Switch.System.Windows.Forms.UseLegacyImages compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.7.1, wordt niet ondersteund in Windows Forms op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

In .NET Framework 4.6.2 en eerdere versies instantieert het RichTextBox-besturingselement het Win32 RichEdit-besturingselement v3.0, en voor toepassingen die gericht zijn op .NET Framework 4.7.1 instantieert het RichTextBox-besturingselement RichEdit v4.1 (in msftedit.dll). De Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl compatibiliteitsswitch is geïntroduceerd om toepassingen toe te staan die gericht zijn op .NET Framework 4.7.1 en latere versies om het nieuwe RichEdit v4.1-besturingselement uit te schakelen en in plaats daarvan het oude RichEdit v3-besturingselement te gebruiken.

In .NET Core en .NET 5.0 en latere versies wordt de Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl-switch niet ondersteund. Alleen nieuwe versies van het besturingselement RichTextBox worden ondersteund.

Versie geïntroduceerd

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Getroffen API's


Compatibiliteitsswitch DoNotSupportSelectAllShortcutInMultilineTextBox wordt niet ondersteund

De Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.6.1, wordt niet ondersteund in Windows Forms op .NET Core en .NET 5.0 en hoger.

Beschrijving wijzigen

Vanaf .NET Framework 4.6.1 selecteert de sneltoets Ctrl + A alle tekst in een TextBox besturingselement. In .NET Framework 4.6 en eerdere versies kon het selecteren van de Ctrl + Sneltoets A niet alle tekst selecteren als de eigenschappen Textbox.ShortcutsEnabled en TextBox.Multiline beide zijn ingesteld op true. De Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox compatibiliteitsswitch is geïntroduceerd in .NET Framework 4.6.1 om het oorspronkelijke gedrag te behouden. Zie TextBox.ProcessCmdKeyvoor meer informatie.

In .NET Core en .NET 5.0 en latere versies wordt de Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox-switch niet ondersteund.

Versie geïntroduceerd

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Beïnvloede API's

  • Geen

Compatibiliteitsswitch DontSupportReentrantFilterMessage wordt niet ondersteund

De Switch.System.Windows.Forms.DontSupportReentrantFilterMessage compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.6.1, wordt niet ondersteund in Windows Forms op .NET Core en .NET 5.0 en hoger.

Beschrijving wijzigen

Vanaf .NET Framework 4.6.1 lost de Switch.System.Windows.Forms.DontSupportReentrantFilterMessage compatibiliteitsswitch mogelijke IndexOutOfRangeException uitzonderingen op wanneer het Application.FilterMessage-bericht wordt aangeroepen met een aangepaste IMessageFilter.PreFilterMessage-implementatie. Zie Mitigation: Custom IMessageFilter.PreFilterMessage Implementationsvoor meer informatie.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.DontSupportReentrantFilterMessage-switch niet ondersteund.

Versie geïntroduceerd

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Getroffen API's


EnableVisualStyleValidation-compatibiliteitsswitch wordt niet ondersteund

De Switch.System.Windows.Forms.EnableVisualStyleValidation compatibiliteitsswitch wordt niet ondersteund in Windows Forms op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

In .NET Framework heeft de Switch.System.Windows.Forms.EnableVisualStyleValidation compatibiliteitsswitch toegestaan dat een toepassing zich afmeldt voor validatie van visuele stijlen die zijn opgegeven in een numerieke vorm.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.EnableVisualStyleValidation-switch niet ondersteund.

Een nieuwe versie geïntroduceerd

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Getroffen API's

  • Geen

Compatibiliteitsoptie "UseLegacyContextMenuStripSourceControlValue" niet ondersteund

De Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.7.2, wordt niet ondersteund in Windows Forms op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

Vanaf .NET Framework 4.7.2 kan de ontwikkelaar met de Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue compatibiliteitsswitch zich afmelden voor het nieuwe gedrag van de eigenschap ContextMenuStrip.SourceControl, die nu een verwijzing naar het broncodebeheer retourneert. Het vorige gedrag van de eigenschap was om nullte retourneren. Zie <AppContextSwitchOverrides> elementvoor meer informatie.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue-switch niet ondersteund.

Geïntroduceerde versie

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Aangetaste API's


De compatibiliteitsschakelaar 'UseLegacyImages' wordt niet ondersteund

De Switch.System.Windows.Forms.UseLegacyImages compatibiliteitsswitch, die is geïntroduceerd in .NET Framework 4.8, wordt niet ondersteund in Windows Forms op .NET Core of .NET 5.0 en hoger.

Beschrijving wijzigen

Vanaf .NET Framework 4.8 heeft de Switch.System.Windows.Forms.UseLegacyImages compatibiliteitsswitch mogelijke problemen met het schalen van afbeeldingen in ClickOnce-scenario's in hoge DPI-omgevingen opgelost. Wanneer deze optie is ingesteld op true, kan de gebruiker met de schakeloptie verouderde afbeeldingsschalen herstellen op hoge DPI-weergaven waarvan de schaal is ingesteld op meer dan 100%. Zie releaseopmerkingen voor .NET Framework 4.8 op GitHub voor meer informatie.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.UseLegacyImages-switch niet ondersteund.

Versie geïntroduceerd

3.0

Verwijder de schakelaar. De switch wordt niet ondersteund en er is geen alternatieve functionaliteit beschikbaar.

Categorie

Windows Forms

Betrokken API's

  • Geen

Over- en SplashScreen-sjablonen zijn defect

De About.vb- en SplashScreen.vb-bestanden die door Visual Studio worden gegenereerd, bevatten verwijzingen naar typen in de My naamruimte die niet beschikbaar zijn .NET Core 3.0 en 3.1.

Ingevoerde versie

3.0

Beschrijving wijzigen

.NET Core 3.0 en 3.1 bevatten geen volledige ondersteuning voor Visual Basic My. De Over en SplashScreen formuliersjablonen in Visual Studio voor Visual Basic Windows Forms-apps verwijzen naar eigenschappen in het My.Application.Info type die niet beschikbaar zijn.

Visual Basic My ondersteuning is verbeterd in .NET 5, uw project upgraden naar .NET 5 of hoger.

-of-

Los de compilerfouten op in de About en SplashScreen typen in uw app. Gebruik de System.Reflection.Assembly-klasse om de informatie op te halen die wordt verstrekt door het My.Application.Info type. Hier is een rechte poort van beide formulieren beschikbaar.

Tip

Dit is voorbeeldcode en niet-geoptimaliseerd. De lijst met kenmerken moet in de cache worden opgeslagen om de laadtijd van formulieren te verminderen.

Over

Imports System.Reflection

Public NotInheritable Class About

    Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the title of the form.
        Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(applicationTitle) Then
            applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        Me.Text = String.Format("About {0}", applicationTitle)
        ' Initialize all of the text displayed on the About Box.
        ' TODO: Customize the application's assembly information in the "Application" pane of the project
        '    properties dialog (under the "Project" menu).
        Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
        Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
        Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
        Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
        Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
    End Sub

    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
        Me.Close()
    End Sub

End Class

SplashScreen-

Imports System.Reflection

Public NotInheritable Class SplashScreen

    Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Set up the dialog text at runtime according to the application's assembly information.  

        'TODO: Customize the application's assembly information in the "Application" pane of the project
        '  properties dialog (under the "Project" menu).

        'Application title
        Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(appTitle) Then
            appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        ApplicationTitle.Text = appTitle

        Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version

        'Format the version information using the text set into the Version control at design time as the
        '  formatting string.  This allows for effective localization if desired.
        '  Build and revision information could be included by using the following code and changing the
        '  Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar.  See
        '  String.Format() in Help for more information.
        '
        '    Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)

        Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)

        'Copyright info
        Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
    End Sub

End Class

Categorie

Visual Basic Windows Forms

Betrokken API's

Geen


Typen in de naamruimte Microsoft.VisualBasic.ApplicationServices zijn niet beschikbaar

De typen in de Microsoft.VisualBasic.ApplicationServices naamruimte zijn niet beschikbaar.

Geïntroduceerde versie

.NET Core 3.0

Beschrijving wijzigen

De typen in de Microsoft.VisualBasic.ApplicationServices naamruimte waren beschikbaar in .NET Framework. Ze zijn niet beschikbaar in .NET Core 3.0 - 3.1.

De types zijn verwijderd om onnodige afhankelijkheden van assemblies te voorkomen of verstorende wijzigingen in latere releases te voorkomen.

Deze naamruimte is toegevoegd in .NET 5 en upgrade uw project naar .NET 5 of hoger.

-of-

Als uw code afhankelijk is van het gebruik van Microsoft.VisualBasic.ApplicationServices typen en hun leden, kunt u mogelijk een bijbehorend type of lid gebruiken in de .NET-klassebibliotheek. Sommige System.Environment en System.Security.Principal.WindowsIdentity leden bieden bijvoorbeeld gelijkwaardige functionaliteit voor de eigenschappen van de Microsoft.VisualBasic.ApplicationServices.User-klasse.

Categorie

Visual Basic

Betroffen API's


Typen in De naamruimte Microsoft.VisualBasic.Devices zijn niet beschikbaar

De typen in de Microsoft.VisualBasic.Devices naamruimte zijn niet beschikbaar.

Versie geïntroduceerd

.NET Core 3.0

Beschrijving wijzigen

De typen in de Microsoft.VisualBasic.Devices naamruimte waren beschikbaar in .NET Framework. Ze zijn niet beschikbaar in .NET Core 3.0 - 3.1.

De typen zijn verwijderd om onnodige assemblyafhankelijkheden te voorkomen of wijzigingen in latere releases te breken.

Deze naamruimte is toegevoegd in .NET 5 en upgrade uw project naar .NET 5 of hoger.

-of-

Als uw code afhankelijk is van het gebruik van Microsoft.VisualBasic.Devices typen en hun leden, kunt u mogelijk een bijbehorend type of lid gebruiken in de .NET-klassebibliotheek. Equivalente functionaliteit voor de Microsoft.VisualBasic.Devices.Clock klasse wordt bijvoorbeeld geleverd door de typen System.DateTime en System.Environment, en gelijkwaardige functionaliteit voor de Microsoft.VisualBasic.Devices.Ports klasse wordt geleverd door typen in de System.IO.Ports naamruimte.

Categorie

Visual Basic

Getroffen API's


Typen in microsoft.VisualBasic.MyServices-naamruimte niet beschikbaar

De typen in de Microsoft.VisualBasic.MyServices naamruimte zijn niet beschikbaar.

Versie uitgebracht

.NET Core 3.0

Beschrijving wijzigen

De typen in de Microsoft.VisualBasic.MyServices naamruimte waren beschikbaar in .NET Framework. Ze zijn niet beschikbaar in .NET Core 3.0 - 3.1.

De typen zijn verwijderd om onnodige assemblyafhankelijkheden te voorkomen of wijzigingen in latere releases te breken.

Deze naamruimte is toegevoegd in .NET 5 en upgrade uw project naar .NET 5 of hoger.

-of-

Als uw code afhankelijk is van het gebruik van Microsoft.VisualBasic.MyServices typen en hun leden, zijn er overeenkomstige typen en leden in de .NET-klassebibliotheek. Hier volgt een overzicht van Microsoft.VisualBasic.MyServices typen en hun equivalente typen in de .NET-klassebibliotheek:

Microsoft.VisualBasic.MyServices-type .NET-klassebibliotheektype
ClipboardProxy System.Windows.Clipboard voor WPF-toepassingen, System.Windows.Forms.Clipboard voor Windows Forms-toepassingen
FileSystemProxy Typen in de System.IO-naamruimte
RegistryProxy Registergerelateerde typen in de Microsoft.Win32-naamruimte
SpecialDirectoriesProxy Environment.GetFolderPath

Categorie

Visual Basic

Getroffen API's


Zie ook