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
- wijzigen in de standaardwaarde van UseShellExecute-
- IDispatchImplAttribute-API wordt verwijderd
- UnauthorizedAccessException gegenereerd door FileSystemInfo.Attributes
- Het verwerken van beschadigde processtatus-uitzonderingen wordt niet ondersteund
- UriBuilder-eigenschappen worden niet langer voorafgegaan door voorlooptekens
- Process.StartInfo genereert InvalidOperationException voor processen die u niet hebt gestart
.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.Start
aanroept.
De volgende eigenschappen op System.Diagnostics.ProcessStartInfo zijn alleen functioneel wanneer ProcessStartInfo.UseShellExecute is true
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
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.
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy-element
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 ##main
worden.
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
, ManifestResourceName
of 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>.resources
te 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
, ManifestResourceName
of 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.
Aanbevolen actie
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 opfalse
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
Aanbevolen actie
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.
- Verwijderde besturingselementen
- CellFormatting-gebeurtenis niet opgeroepen als tooltip wordt weergegeven
- Control.DefaultFont werd gewijzigd naar Segoe UI 9 pt
- Modernisering van de FolderBrowserDialog-
- SerializableAttribute verwijderd uit sommige typen Windows Forms
- Compatibiliteitsswitch AllowUpdateChildControlIndexForTabControls wordt niet ondersteund
- DomainUpDown.UseLegacyScrolling-compatibiliteitsswitch wordt niet ondersteund
- DoNotLoadLatestRichEditControl compatibiliteitsswitch wordt niet ondersteund
- Compatibiliteitsswitch DoNotSupportSelectAllShortcutInMultilineTextBox wordt niet ondersteund
- De compatibiliteitsswitch DontSupportReentrantFilterMessage wordt niet ondersteund
- EnableVisualStyleValidation-compatibiliteitsswitch wordt niet ondersteund
- GebruikCompatibiliteitsschakelaar LegacyContextMenuStripSourceControlValue niet ondersteund
- Compatibiliteitsschakelaar UseLegacyImages niet ondersteund
- Over- en SplashScreen-sjablonen zijn defect voor Visual Basic:
- Types in de namespace Microsoft.VisualBasic.ApplicationServices zijn niet beschikbaar
- Types in de namespace Microsoft.VisualBasic.Devices zijn niet beschikbaar
- Typen in de naamruimte Microsoft.VisualBasic.MyServices zijn niet beschikbaar
.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:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
Versie geïntroduceerd
3.1
Aanbevolen actie
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
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
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
Aanbevolen actie
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.
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:
Deze wijziging is aangebracht in overeenstemming met UX-richtlijnen (Windows-gebruikerservaring).
Versie geïntroduceerd
3.0
Aanbevolen actie
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.
In .NET Core 3.0 maakt Windows Forms gebruik van een nieuwere COM-besturingselement dat is geïntroduceerd in Windows Vista:
Versie gelanceerd
3.0
Aanbevolen actie
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.
System.InvariantComparer
- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore
- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRef
System.Resources.ResXDataNode
System.Resources.ResXFileRef
- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCT
System.Windows.Forms.NativeMethods.MSG
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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 null
te 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
Aanbevolen actie
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
Aanbevolen actie
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.
Aanbevolen actie
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.
Aanbevolen actie
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.
Aanbevolen actie
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.
Aanbevolen actie
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