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
- De standaardwaarde van UseShellExecute wijzigen
- IDispatchImplAttribute-API is verwijderd
- UnauthorizedAccessException gegenereerd door FileSystemInfo.Attributes
- Het verwerken van beschadigde processtatus-uitzonderingen wordt niet ondersteund
- UriBuilder-eigenschappen bevatten geen voorlooptekens meer
- Process.StartInfo genereert InvalidOperationException voor processen die u niet hebt gestart
.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
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
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.
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy-element
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
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 ?
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=4
de uitvoer . - In .NET Core is
?one=1&two=2&three=3&four=4
de 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
Aanbevolen actie
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 true
op, 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
Aanbevolen actie
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
, ManifestResourceName
of DependentUpon
metagegevens zijn opgegeven voor een EmbeddedResource
item in het projectbestand, heeft MSBuild een manifestbestandsnaam in het patroon <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
gegenereerd. 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 , ManifestResourceName
of DependentUpon
metagegevens hebt LogicalName
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 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 true
op , 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 EmbeddedResourceUseDependentUponConvention
false
, genereert MSBuild de manifestnaam op basis van het vorige gedrag, dat combineert RootNamespace
en het relatieve bestandspad.
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 deze in te stellen
EmbeddedResourceUseDependentUponConvention
false
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
Aanbevolen actie
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.
- Verwijderde besturingselementen
- De gebeurtenis CellFormatting wordt niet gegenereerd als knopinfo wordt weergegeven
- Control.DefaultFont is gewijzigd in Segoe UI 9 pt
- Modernisering van de FolderBrowserDialog
- SerializableAttribute verwijderd uit sommige Typen Windows Forms
- Compatibiliteitsswitch AllowUpdateChildControlIndexForTabControls wordt niet ondersteund
- Compatibiliteitsswitch DomainUpDown.UseLegacyScrolling wordt niet ondersteund
- Compatibiliteitsswitch DoNotLoadLatestRichEditControl wordt niet ondersteund
- Compatibiliteitsswitch DoNotSupportSelectAllShortcutInMultilineTextBox wordt niet ondersteund
- Compatibiliteitsswitch DontSupportReentrantFilterMessage wordt niet ondersteund
- EnableVisualStyleValidation-compatibiliteitsswitch wordt niet ondersteund
- CompatibiliteitsswitchLegacyContextMenuStripSourceControlValue niet ondersteund
- CompatibiliteitsswitchLegacyImages gebruiken wordt niet ondersteund
- Over- en SplashScreen-sjablonen zijn verbroken voor Visual Basic
- Typen in de naamruimte Microsoft.VisualBasic.ApplicationServices zijn niet beschikbaar
- Typen in De naamruimte Microsoft.VisualBasic.Devices zijn niet beschikbaar
- Typen in microsoft.VisualBasic.MyServices-naamruimte niet beschikbaar
.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:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- 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 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
- 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 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
Aanbevolen actie
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.
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:
Deze wijziging is aangebracht om te voldoen aan de richtlijnen voor Windows-gebruikerservaring (UX).
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 Microsoft Sans Serif 8.25 pt
in 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:
In .NET Core 3.0 maakt Windows Forms gebruik van een nieuwere COM-besturingselement dat is geïntroduceerd in Windows Vista:
Versie geïntroduceerd
3,0
Aanbevolen actie
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:
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. 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
Aanbevolen actie
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
Aanbevolen actie
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
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.
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
Aanbevolen actie
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
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 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.
Aanbevolen actie
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.
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 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.
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 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.
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 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
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor