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 belangrijke wijzigingen die fouten veroorzaken, worden hier toegevoegd wanneer we hiervan op de hoogte worden.

Core .NET-bibliotheken

.NET 8

IDispatchImplAttribute-API is verwijderd

.NET Core 2.1

De standaardwaarde van UseShellExecute wijzigen

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

Wijzigingsbeschrijving

Process.Start hiermee kunt u een toepassing rechtstreeks starten, bijvoorbeeld met code zoals Process.Start("mspaint.exe") die Paint start. Hiermee kunt u ook indirect een gekoppelde toepassing starten als ProcessStartInfo.UseShellExecute deze is ingesteld op true. In .NET Framework is de standaardwaarde ProcessStartInfo.UseShellExecute voortrue, wat betekent dat code zoals Process.Start("mytextfile.txt") het starten van Kladblok, 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 instellen ProcessStartInfo.UseShellExecute op false. In .NET Core is de standaardwaarde voor ProcessStartInfo.UseShellExecutefalse. Dit betekent dat standaard gekoppelde toepassingen niet worden gestart wanneer u aanroept Process.Start.

De volgende eigenschappen System.Diagnostics.ProcessStartInfo zijn alleen functioneel wanneerProcessStartInfo.UseShellExecute:true

Deze wijziging is geïntroduceerd in .NET Core om prestatieredenen. Process.Start Normaal gesproken wordt 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. Als u deze standaardcase sneller wilt maken, wijzigt .NET Core de standaardwaarde van ProcessStartInfo.UseShellExecute .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 de aanroep Process.Start(ProcessStartInfo) in op UseShellExecutetrue het ProcessStartInfo object.

Categorie

Core .NET-bibliotheken

Betrokken API's


.NET Core 1.0

UnauthorizedAccessException gegenereerd door FileSystemInfo.Attributes

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

Wijzigingsbeschrijving

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

Versie geïntroduceerd

1.0

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

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.

Wijzigingsbeschrijving

Voorheen konden beschadigde processtatusuitzonderingen worden opgevangen en verwerkt door handlers van beheerde codeuitzonderingen, 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 beschadigde processtatus-uitzonderingen op beheerde code.

Versie geïntroduceerd

1.0

Vermijd de noodzaak om beschadigde processtatusuitzondering af te handelen door in plaats daarvan de situaties aan te pakken die ertoe leiden. Als het absoluut noodzakelijk is om beschadigde processtatusuitzondering af te handelen, schrijft u de uitzonderingshandler in C- of C++-code.

Categorie

Core .NET-bibliotheken

Betrokken API's


UriBuilder-eigenschappen bevatten geen voorlooptekens meer

UriBuilder.Fragment een voorloopteken # niet langer voorafgaat en UriBuilder.Query een voorloopteken ? niet langer prependeert wanneer er al een teken aanwezig is.

Wijzigingsbeschrijving

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

Vanaf .NET Core 1.0 worden de # of ? tekens niet langer voorafgegaan door deze eigenschappen aan de opgeslagen waarde als deze al aanwezig is aan het begin van de tekenreeks.

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 ? elke keer dat u toevoegt niet meer hoeft te verwijderen.

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 .NET Framework is ????one=1&two=2&three=3&four=4de uitvoer .
  • In .NET Core is ?one=1&two=2&three=3&four=4de uitvoer .

Categorie

Core .NET-bibliotheken

Betrokken API's


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

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

Wijzigingsbeschrijving

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

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

Versie geïntroduceerd

1.0

Open de Process.StartInfo eigenschap 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

Betrokken API's


Cryptografie

.NET Core 2.1

Booleaanse parameter van SignedCms.ComputeSignature wordt gerespecteerd

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

Wijzigingsbeschrijving

In .NET Framework wordt de silent parameter van de SignedCms.ComputeSignature(CmsSigner, Boolean) methode genegeerd en wordt altijd een pincodeprompt weergegeven indien vereist door de provider. In .NET Core wordt de silent parameter gerespecteerd en als deze is ingesteld trueop, 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.

Versie geïntroduceerd

2.1

Om ervoor te zorgen dat een pincodeprompt indien nodig wordt weergegeven, moeten bureaubladtoepassingen de Booleaanse parameter aanroepen SignedCms.ComputeSignature(CmsSigner, Boolean) en 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

Wijzigingsbeschrijving

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 in het patroon <RootNamespace>.<ResourceFilePathFromProjectRoot>.resourcesgegenereerd. Als RootNamespace dit niet is gedefinieerd in het projectbestand, wordt deze standaard ingesteld op de projectnaam. De gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx in de hoofdprojectmap was bijvoorbeeld MyProject.Form1.resources.

Vanaf .NET Core 3.0 gebruikt MSBuild typegegevens uit het bronbestand om de manifestbestandsnaam in het patroon te genereren, te beginnen in .NET Core 3 Form1.cs.0.<Namespace>.<ClassName>.resources De naamruimte en klassenaam worden geëxtraheerd uit het eerste type in het bronbestand met een colocatie. Bijvoorbeeld de gegenereerde manifestnaam voor een resourcebestand met de naam Form1.resx dat zich bevindt op een bronbestand met de naam Form1.cs MyNamespace.Form1.resources is. 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 , ManifestResourceNameof DependentUpon metagegevens hebt LogicalNameopgegeven 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 EmbeddedResourceUseDependentUponConvention eigenschap aan .NET Core-projecten. Resourcebestanden worden standaard niet expliciet vermeld in een .NET Core-projectbestand, dus ze hebben geen DependentUpon metagegevens om op te geven hoe het gegenereerde .resources-bestand een naam moet geven. Wanneer EmbeddedResourceUseDependentUponConvention dit is ingesteld trueop , wat de standaardinstelling is, zoekt MSBuild naar een bronbestand met eencolocated en extraheert een naamruimte en klassenaam uit dat bestand. Als u deze optie instelt EmbeddedResourceUseDependentUponConventionfalse, genereert MSBuild de manifestnaam op basis van het vorige gedrag, dat combineert RootNamespace en het relatieve bestandspad.

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 deze in te stellen EmbeddedResourceUseDependentUponConventionfalse in uw projectbestand.

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

Categorie

MSBuild

Betrokken API's

N.v.t.


Netwerken

.NET Core 2.0

WebClient.CancelAsync annuleert niet altijd onmiddellijk

Vanaf .NET Core 2.0 WebClient.CancelAsync() wordt de aanvraag niet onmiddellijk geannuleerd als het antwoord is gestart.

Wijzigingsbeschrijving

Voorheen heeft het aanroepen WebClient.CancelAsync() de aanvraag onmiddellijk geannuleerd. Vanaf .NET Core 2.0 WebClient.CancelAsync() wordt de aanvraag alleen geannuleerd als het antwoord niet is gestart met ophalen. Als het antwoord is begonnen met ophalen, wordt de aanvraag pas geannuleerd nadat een volledig antwoord is gelezen.

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

Versie geïntroduceerd

2.0

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

Categorie

Netwerken

Betrokken 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 besturingselementen

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

Wijzigingsbeschrijving

Vanaf .NET Core 3.1 zijn verschillende Besturingselementen voor Windows Forms niet meer beschikbaar. Vervangende besturingselementen met een beter ontwerp en ondersteuning zijn geïntroduceerd in .NET Framework 2.0. De afgeschafte besturingselementen zijn eerder verwijderd uit designer-werksets, maar waren nog steeds beschikbaar om te worden gebruikt.

De volgende typen zijn niet meer beschikbaar:

Versie geïntroduceerd

3.1

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

Besturingselement verwijderd (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, Menu ToolStripDropDown MenuItemCollection
Menuitem ToolStripMenuItem
Werkbalk Werkbalk ToolBarAppearance
Knopknop ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Categorie

Windows Forms

Betrokken API's


De gebeurtenis CellFormatting wordt niet gegenereerd als knopinfo wordt weergegeven

A DataGridView toont nu de tekst en foutknopinfo van een cel wanneer u de muisaanwijzer aanwijst en wanneer deze is geselecteerd via het toetsenbord. Als er knopinfo wordt weergegeven, wordt de DataGridView.CellFormatting gebeurtenis niet gegenereerd.

Wijzigingsbeschrijving

Voorafgaand aan .NET Core 3.1, waarop DataGridView de ShowCellToolTips eigenschap is ingesteld om knopinfo weer te true geven voor de tekst en fouten van een cel toen de cel werd aangeroepen door een muis. Knopinfo is niet weergegeven wanneer een cel is geselecteerd via het toetsenbord (bijvoorbeeld met de Tab-toets, sneltoetsen of pijlnavigatie). Als de gebruiker een cel heeft bewerkt en terwijl de DataGridView bewerkingsmodus nog in de bewerkingsmodus stond, heeft u de muisaanwijzer boven een cel geplaatst waarvoor de ToolTipText eigenschap niet is ingesteld, een CellFormatting gebeurtenis gegenereerd om de tekst van de cel op te maken voor weergave in de cel.

Als u wilt voldoen aan de toegankelijkheidsstandaarden, begint u in .NET Core 3.1, een DataGridView eigenschap die is ShowCellToolTips ingesteld om knopinfo weer te true geven voor de tekst en fouten van een cel, niet alleen wanneer de cel wordt aangezet, maar ook wanneer deze is geselecteerd via het toetsenbord. Als gevolg van deze wijziging wordt de CellFormatting gebeurtenis niet gegenereerd wanneer cellen die niet over de ToolTipText eigenschappenset beschikken, worden aangezet terwijl de DataGridView bewerkingsmodus is ingeschakeld. 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 deze zich in de DataGridView bewerkingsmodus bevindt.

Categorie

Windows Forms

Betrokken API's

Geen


.NET Core 3.0

Standaardlettertype voor besturingselementen gewijzigd in Segoe UI 9 pt

Wijzigingsbeschrijving

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

Standaardlettertype voor besturingselementen 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. Voorbeeld:

Standaardlettertype voor besturingselementen in .NET Core

Deze wijziging is aangebracht om te voldoen aan de richtlijnen voor Windows-gebruikerservaring (UX).

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 Microsoft Sans Serif 8.25 ptin op . Voorbeeld:

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 ApplicationDefaultFont eigenschap 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 te bellen 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());
        }
    }
    

Categorie

  • Windows Forms

Betrokken API's

Geen.


Modernisering van de FolderBrowserDialog

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

Wijzigingsbeschrijving

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

De FolderBrowserDialogControl in .NET Framework

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

De FolderBrowserDialogControl in .NET Core

Versie geïntroduceerd

3,0

Het dialoogvenster wordt automatisch bijgewerkt.

Als u het oorspronkelijke dialoogvenster wilt behouden, stelt u de FolderBrowserDialog.AutoUpgradeEnabled eigenschap false in op 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 Typen Windows Forms

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

Wijzigingsbeschrijving

De volgende typen zijn ingericht met het SerializableAttribute in .NET Framework, maar het kenmerk is verwijderd in .NET Core:

Dit serialisatiemechanisme heeft in het verleden ernstige onderhouds- en beveiligingsproblemen gehad. Onderhouden van SerializableAttribute typen betekent dat deze typen moeten worden getest op serialisatiewijzigingen van versie-naar-versie en mogelijk serialisatiewijzigingen van framework-naar-framework. 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 serialisatie voor 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

Betrokken 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 hoger, maar wordt niet ondersteund op .NET Core of .NET 5.0 en hoger.

Wijzigingsbeschrijving

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 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

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.

Wijzigingsbeschrijving

Vanaf .NET Framework 4.7.1 konden ontwikkelaars zich met de Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling compatibiliteitsswitch afmelden voor onafhankelijke DomainUpDown.DownButton() acties en DomainUpDown.UpButton() acties. Met de schakeloptie is het verouderde gedrag hersteld, waarbij de tekst van de DomainUpDown.UpButton() context wordt genegeerd en de ontwikkelaar actie moet uitvoeren DomainUpDown.DownButton() op het besturingselement voordat de DomainUpDown.UpButton() actie wordt uitgevoerd. Zie <het element AppContextSwitchOverrides> voor meer informatie.

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 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


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.

Wijzigingsbeschrijving

In .NET Framework 4.6.2 en eerdere versies maakt het RichTextBox besturingselement een exemplaar van het Besturingselement Win32 RichEdit v3.0, en voor toepassingen die gericht zijn op .NET Framework 4.7.1, instantiëren 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 zich richten 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 RichTextBox besturingselement 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

Betrokken 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.

Wijzigingsbeschrijving

Vanaf .NET Framework 4.6.1 selecteert u de sneltoets Ctrl + A in een TextBox besturingselement dat alle tekst heeft geselecteerd. In .NET Framework 4.6 en eerdere versies is het selecteren van de sneltoets Ctrl + A mislukt om alle tekst te 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. Ga voor meer informatie naar TextBox.ProcessCmdKey.

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

Betrokken 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.

Wijzigingsbeschrijving

Vanaf .NET Framework 4.6.1 behandelt de Switch.System.Windows.Forms.DontSupportReentrantFilterMessage compatibiliteitsswitch mogelijke IndexOutOfRangeException uitzonderingen wanneer het Application.FilterMessage bericht wordt aangeroepen met een aangepaste IMessageFilter.PreFilterMessage implementatie. Zie Mitigation: Custom IMessageFilter.PreFilterMessage Implementations voor 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

Betrokken 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.

Wijzigingsbeschrijving

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.

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

CompatibiliteitsswitchLegacyContextMenuStripSourceControlValue 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.

Wijzigingsbeschrijving

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

In .NET Core en .NET 5.0 en hoger wordt de Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 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


CompatibiliteitsswitchLegacyImages gebruiken 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.

Wijzigingsbeschrijving

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 true, kan de gebruiker verouderde afbeeldingsschalen herstellen op hoge DPI-schermen 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 verbroken

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

Versie geïntroduceerd

3,0

Wijzigingsbeschrijving

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

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

– of –

Los de compilerfouten op in de typen About en SplashScreen in uw app. Gebruik de System.Reflection.Assembly klasse om de informatie op te halen die door het My.Application.Info type wordt verstrekt. 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.

Info

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.

Versie geïntroduceerd

.NET Core 3.0

Wijzigingsbeschrijving

De typen in de Microsoft.VisualBasic.ApplicationServices naamruimte zijn 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.ApplicationServices typen en hun leden, kunt u mogelijk een bijbehorend type of lid in de .NET-klassebibliotheek gebruiken. Sommige System.Environment leden bieden System.Security.Principal.WindowsIdentity bijvoorbeeld equivalente functionaliteit aan de eigenschappen van de Microsoft.VisualBasic.ApplicationServices.User klasse.

Categorie

Visual Basic

Betrokken 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

Wijzigingsbeschrijving

De typen in de Microsoft.VisualBasic.Devices naamruimte zijn 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 in de .NET-klassebibliotheek gebruiken. Equivalente functionaliteit voor de Microsoft.VisualBasic.Devices.Clock klasse wordt bijvoorbeeld geleverd door de System.DateTime en System.Environment typen, en equivalente functionaliteit voor de Microsoft.VisualBasic.Devices.Ports klasse wordt geleverd door typen in de System.IO.Ports naamruimte.

Categorie

Visual Basic

Betrokken API's


Typen in microsoft.VisualBasic.MyServices-naamruimte niet beschikbaar

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

Versie geïntroduceerd

.NET Core 3.0

Wijzigingsbeschrijving

De typen in de Microsoft.VisualBasic.MyServices naamruimte zijn 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 toewijzing van Microsoft.VisualBasic.MyServices-typen aan hun equivalente .NET-klassebibliotheektypen:

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

Betrokken API's


Zie ook