Changements de rupture pour la migration de .NET Framework vers .NET Core
Si vous migrez une application de .NET Framework vers .NET Core versions 1.0 à 3.1, les changements cassants répertoriés dans cet article peuvent vous affecter. Les modifications de rupture sont regroupées par catégorie, et au sein de ces catégories, par la version de .NET Core dans laquelle elles ont été introduites.
Remarque
Cet article n’est pas une liste complète des changements cassants entre le .NET Framework et .NET Core. Les changements majeurs les plus importants sont ajoutés ici au fur et à mesure que nous les identifions.
Bibliothèques .NET Core
- Changement de la valeur par défaut de UseShellExecute
- API IDispatchImplAttribute est supprimée
- UnauthorizedAccessException levé par FileSystemInfo.Attributes
- La gestion des exceptions d’état de processus endommagés n’est pas prise en charge
- Les propriétés UriBuilder ne précèdent plus les caractères de début
- Process.StartInfo lève une exception InvalidOperationException pour des processus que vous n’avez pas démarrés
.NET 8
API IDispatchImplAttribute est supprimée
.NET Core 2.1
Modification de la valeur par défaut d’UseShellExecute
ProcessStartInfo.UseShellExecute a une valeur par défaut de false
sur .NET Core. Sur .NET Framework, sa valeur par défaut est true
.
Description des modifications
Process.Start vous permet de lancer une application directement, par exemple, avec du code tel que Process.Start("mspaint.exe")
qui lance Paint. Il vous permet également de lancer indirectement une application associée si ProcessStartInfo.UseShellExecute est défini sur true
. Sur .NET Framework, la valeur par défaut de ProcessStartInfo.UseShellExecute est true
, ce qui signifie que ce code tel que Process.Start("mytextfile.txt")
lance le Bloc-notes, si vous avez associé des fichiers .txt à cet éditeur. Pour empêcher indirectement le lancement d’une application sur .NET Framework, vous devez définir explicitement ProcessStartInfo.UseShellExecute sur false
. Sur .NET Core, la valeur par défaut de ProcessStartInfo.UseShellExecute est false
. Cela signifie que, par défaut, les applications associées ne sont pas lancées lorsque vous appelez Process.Start
.
Les propriétés suivantes sur System.Diagnostics.ProcessStartInfo ne sont fonctionnelles que lorsque ProcessStartInfo.UseShellExecute est true
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
Cette modification a été introduite dans .NET Core pour des raisons de performances. En règle générale, Process.Start est utilisé pour lancer une application directement. Le lancement d’une application directement n’a pas besoin d’impliquer l’interpréteur de commandes Windows et d’entraîner le coût de performances associé. Pour accélérer ce cas par défaut, .NET Core modifie la valeur par défaut de ProcessStartInfo.UseShellExecute en false
. Vous pouvez opter pour le chemin lent si vous en avez besoin.
Version introduite
2.1
Remarque
Dans les versions antérieures de .NET Core, UseShellExecute
n’a pas été implémenté pour Windows.
Action recommandée
Si votre application s’appuie sur l’ancien comportement, utilisez la fonction Process.Start(ProcessStartInfo) avec UseShellExecute réglé à true
sur l’objet ProcessStartInfo.
Catégorie
Bibliothèques .NET Core
API affectées
.NET Core 1.0
UnauthorizedAccessException générée par FileSystemInfo.Attributes
Dans .NET Core, une exception UnauthorizedAccessException est levée quand l’appelant tente de définir une valeur d’attribut de fichier sans disposer de l’autorisation d’accès en écriture.
Description des modifications
Dans .NET Framework, une ArgumentException est levée lorsque l’appelant tente de définir une valeur d’attribut de fichier dans FileSystemInfo.Attributes mais n’a pas d’autorisation d’écriture. Dans .NET Core, une exception UnauthorizedAccessException est levée à la place. (Dans .NET Core, une exception ArgumentException est toujours levée si l’appelant tente de définir un attribut de fichier non valide.)
Version introduite
1.0
Action recommandée
Modifiez toutes les instructions catch
pour intercepter une exception UnauthorizedAccessException au lieu de, ou en plus de ArgumentException, si nécessaire.
Catégorie
Bibliothèques .NET Core
API affectées
La gestion des exceptions état altéré n’est pas prise en charge
La gestion des exceptions d’état de processus endommagés dans .NET Core n’est pas prise en charge.
Description des modifications
Auparavant, les exceptions d’état de processus endommagés pouvaient être interceptées et gérées par des gestionnaires d’exceptions de code managé, par exemple, à l’aide d’une instruction try-catch
À compter de .NET Core 1.0, les exceptions d’état de processus endommagé ne peuvent pas être gérées par du code managé. Le Common Language Runtime ne fournit pas d’exceptions d’état de processus endommagés au code managé.
Version introduite
1.0
Action recommandée
Évitez d’avoir à gérer les exceptions d’état de processus altéré en traitant plutôt les situations qui les entraînent. S’il est absolument nécessaire de gérer les exceptions d’état de processus endommagés, écrivez le gestionnaire d’exceptions en code C ou C++.
Catégorie
Bibliothèques .NET Core
API affectées
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- élément legacyCorruptedStateExceptionsPolicy
Les propriétés UriBuilder ne précèdent plus les caractères de début
UriBuilder.Fragment ne précède plus un caractère de début #
et UriBuilder.Query ne précède plus un caractère de début ?
le cas échéant.
Description des modifications
Dans .NET Framework, les propriétés UriBuilder.Fragment et UriBuilder.Query ajoutent toujours un caractère #
ou ?
, respectivement, avant la valeur en cours de stockage. Ce comportement peut entraîner plusieurs #
ou ?
caractères dans la valeur stockée si la chaîne contient déjà l’un de ces caractères de début. Par exemple, la valeur de UriBuilder.Fragment peut devenir ##main
.
À compter de .NET Core 1.0, ces propriétés ne précèdent plus les caractères #
ou ?
à la valeur stockée si une valeur est déjà présente au début de la chaîne.
Version introduite
1.0
Action recommandée
Vous n’avez plus besoin de supprimer explicitement l’un de ces caractères de début lors de la définition des valeurs de propriété. Cela est particulièrement utile lorsque vous ajoutez des valeurs, car vous n’avez plus besoin de supprimer la #
de début ou ?
chaque fois que vous ajoutez.
Par exemple, l’extrait de code suivant montre la différence de comportement entre .NET Framework et .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);
- Dans .NET Framework, la sortie est
????one=1&two=2&three=3&four=4
. - Dans .NET Core, la sortie est
?one=1&two=2&three=3&four=4
.
Catégorie
Bibliothèques .NET Core
API affectées
Process.StartInfo lève une exception InvalidOperationException pour des processus que vous n’avez pas démarrés
La lecture de la propriété Process.StartInfo pour les processus que votre code n’a pas démarrés lève une exception InvalidOperationException.
Description des modifications
Dans .NET Framework, l’accès à la propriété Process.StartInfo pour les processus que votre code n’a pas démarré retourne un objet ProcessStartInfo factice. L’objet factice contient des valeurs par défaut pour toutes ses propriétés, sauf EnvironmentVariables.
À compter de .NET Core 1.0, si vous lisez la propriété Process.StartInfo d’un processus que vous n’avez pas démarré (c’est-à-dire en appelant Process.Start), une exception InvalidOperationException est levée.
Version introduite
1.0
Action recommandée
N’accédez pas à la propriété Process.StartInfo pour les processus que votre code n’a pas démarrés. Par exemple, ne lisez pas cette propriété pour les processus retournés par Process.GetProcesses.
Catégorie
Bibliothèques .NET Core
API affectées
Cryptographie
.NET Core 2.1
Le paramètre booléen de SignedCms.ComputeSignature est respecté
Dans .NET Core, le paramètre de silent
booléen de la méthode SignedCms.ComputeSignature(CmsSigner, Boolean) est respecté. Une invite de code confidentiel n’est pas affichée si ce paramètre est défini sur true
.
Description des modifications
Dans .NET Framework, le paramètre silent
de la méthode SignedCms.ComputeSignature(CmsSigner, Boolean) est ignoré et une invite de code confidentiel s’affiche toujours si nécessaire par le fournisseur. Dans .NET Core, le paramètre silent
est respecté et, s’il est défini sur true
, une invite de code confidentiel n’est jamais affichée, même si elle est requise par le fournisseur.
La prise en charge des messages CMS/PKCS #7 a été introduite dans .NET Core dans la version 2.1.
Version introduite
2.1
Action recommandée
Pour vérifier qu’une invite à entrer un PIN s’affiche si nécessaire, les applications de bureau doivent appeler SignedCms.ComputeSignature(CmsSigner, Boolean) et définir le paramètre booléen sur false
. Le comportement résultant est le même que sur .NET Framework, peu importe que le contexte silencieux y soit désactivé ou non.
Catégorie
Cryptographie
API affectées
MSBuild
.NET Core 3.0
Modification du nom du fichier manifeste de ressource
À compter de .NET Core 3.0, dans le cas par défaut, MSBuild génère un autre nom de fichier manifeste pour les fichiers de ressources.
Version introduite
3.0
Description des modifications
Avant .NET Core 3.0, si aucune LogicalName
, ManifestResourceName
ou DependentUpon
métadonnées ont été spécifiées pour un élément EmbeddedResource
dans le fichier projet, MSBuild a généré un nom de fichier manifeste dans le modèle <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Si RootNamespace
n’est pas défini dans le fichier projet, il est défini par défaut sur le nom du projet. Par exemple, le nom du manifeste généré pour un fichier de ressources nommé Form1.resx dans le répertoire du projet racine était MyProject.Form1.resources.
À compter de .NET Core 3.0, si un fichier de ressources est colocalisé avec un fichier source du même nom (par exemple, Form1.resx et Form1.cs), MSBuild utilise les informations de type du fichier source pour générer le nom du fichier manifeste dans le modèle <Namespace>.<ClassName>.resources
. L’espace de noms et le nom de classe sont extraits du premier type dans le fichier source colocalisé. Par exemple, le nom du manifeste généré pour un fichier de ressources nommé Form1.resx colocalisé avec un fichier source nommé Form1.cs est MyNamespace.Form1.resources. La principale chose à noter est que la première partie du nom de fichier est différente des versions antérieures de .NET Core (MyNamespace au lieu de MyProject).
Remarque
Si vous avez LogicalName
, ManifestResourceName
ou DependentUpon
métadonnées spécifiées sur un élément EmbeddedResource
dans le fichier projet, cette modification n’affecte pas ce fichier de ressources.
Cette modification majeure a été introduite avec l’ajout de la propriété EmbeddedResourceUseDependentUponConvention
aux projets .NET Core. Par défaut, les fichiers de ressources ne sont pas répertoriés explicitement dans un fichier projet .NET Core. Ils n’ont donc aucune DependentUpon
métadonnées pour spécifier comment nommer le fichier .resources généré .resources. Lorsque EmbeddedResourceUseDependentUponConvention
est défini sur true
, qui est la valeur par défaut, MSBuild recherche un fichier source colocalisé et extrait un espace de noms et un nom de classe à partir de ce fichier. Si vous définissez EmbeddedResourceUseDependentUponConvention
sur false
, MSBuild génère le nom du manifeste en fonction du comportement précédent, qui combine RootNamespace
et le chemin du fichier relatif.
Action recommandée
Dans la plupart des cas, aucune action n’est requise de la part du développeur, donc votre application doit continuer à fonctionner. Toutefois, si cette modification interrompt votre application, vous pouvez :
Modifiez votre code pour attendre le nouveau nom du manifeste.
Désactivez la nouvelle convention d’affectation de noms en définissant
EmbeddedResourceUseDependentUponConvention
surfalse
dans votre fichier projet.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Catégorie
MSBuild
API affectées
N/A
Réseautage
.NET Core 2.0
WebClient.CancelAsync n’annule pas toujours immédiatement
À compter de .NET Core 2.0, l’appel de WebClient.CancelAsync() n’annule pas immédiatement la requête si la réponse a commencé à être récupérée.
Description des modifications
Auparavant, l'appel WebClient.CancelAsync() annulait la demande immédiatement. À compter de .NET Core 2.0, l’appel de WebClient.CancelAsync() annule immédiatement la requête uniquement si la réponse n’a pas encore commencé à être récupérée. Si la réponse a commencé à être récupérée, la requête est annulée uniquement après la lecture complète de la réponse.
Cette modification a été implémentée car l’API WebClient est déconseillée en faveur de HttpClient.
Version introduite
2.0
Action recommandée
Utilisez la classe System.Net.Http.HttpClient au lieu de System.Net.WebClient, qui est déconseillée.
Catégorie
Réseautage
API affectées
Windows Forms
La prise en charge de Windows Forms a été ajoutée à .NET Core dans la version 3.0. Si vous migrez une application Windows Forms de .NET Framework vers .NET Core, les changements cassants répertoriés ici peuvent affecter votre application.
- Contrôles supprimés
- Événement CellFormatting non déclenché si l’info-bulle est affichée
- Control.DefaultFont a été changé en Segoe UI 9 pt
- Modernisation de FolderBrowserDialog
- Attribut Serializable supprimé de certains types de Windows Forms
- Commutateur de compatibilité AllowUpdateChildControlIndexForTabControls non pris en charge
- Commutateur de compatibilité DomainUpDown.UseLegacyScrolling non pris en charge
- Commutateur de compatibilité DoNotLoadLatestRichEditControl non pris en charge
- Commutateur de compatibilité DoNotSupportSelectAllShortcutInMultilineTextBox non pris en charge
- Commutateur de compatibilité DontSupportReentrantFilterMessage non pris en charge
- Commutateur de compatibilité EnableVisualStyleValidation non pris en charge
- Commutateur de compatibilité UseLegacyContextMenuStripSourceControlValue non pris en charge
- Commutateur de compatibilité UseLegacyImages non pris en charge
- À propos et les modèles SplashScreen sont rompus pour Visual Basic
- Types dans l’espace de noms Microsoft.VisualBasic.ApplicationServices non disponibles
- Types dans l’espace de noms Microsoft.VisualBasic.Devices non disponibles
- Types dans l’espace de noms Microsoft.VisualBasic.MyServices non disponibles
.NET Core 3.1
Contrôles supprimés
À compter de .NET Core 3.1, certains contrôles Windows Forms ne sont plus disponibles.
Description des modifications
À compter de .NET Core 3.1, les différents contrôles Windows Forms ne sont plus disponibles. Les contrôles de remplacement qui ont une meilleure conception et prise en charge ont été introduits dans .NET Framework 2.0. Les contrôles déconseillés ont été précédemment supprimés des boîtes à outils du concepteur, mais ils étaient toujours disponibles pour être utilisés.
Les types suivants ne sont plus disponibles :
- 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
Version introduite
3.1
Action recommandée
Chaque contrôle supprimé a un contrôle de remplacement recommandé. Reportez-vous au tableau suivant :
Suppression du contrôle (API) | Remplacement recommandé | API associées supprimées |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Menu Principal | MenuStrip | |
Menu | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
Élément de menu | ToolStripMenuItem | |
Barre des outils | ToolStrip | Apparence de la barre d'outils |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Catégorie
Windows Forms
API affectées
- 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
Événement CellFormatting non déclenché si l’info-bulle est affichée
Le DataGridView affiche maintenant le texte et les info-bulles d’erreur d’une cellule lorsqu’elle est pointée par une souris et lorsqu’elle est sélectionnée via le clavier. Si une info-bulle est affichée, l’événement DataGridView.CellFormatting n’est pas déclenché.
Description des modifications
Avant .NET Core 3.1, une DataGridView dont la propriété ShowCellToolTips était définie sur true
affichait une info-bulle pour le texte et les erreurs d’une cellule lorsque la cellule était pointée par une souris. Les info-bulles n’étaient pas été affichées lorsqu’une cellule était été sélectionnée via le clavier (par exemple, à l’aide de la touche Tab, des touches de raccourci ou de la navigation de direction). Si l’utilisateur a modifié une cellule, puis, alors que le DataGridView était toujours en mode édition, pointé sur une cellule qui n’avait pas la propriété ToolTipText définie, un événement de CellFormatting a été déclenché pour mettre en forme le texte de la cellule à afficher dans la cellule.
Pour répondre aux normes d’accessibilité, à partir de .NET Core 3.1, une DataGridView dont la propriété ShowCellToolTips était définie sur true
affichait les info-bulles pour le texte et les erreurs d’une cellule non seulement au moment du pointage, mais également à la sélection via le clavier. En conséquence de cette modification, l’événement CellFormatting n’est pas déclenché lorsque les cellules dont la propriété ToolTipText n’est pas définie sont pointées pendant alors que DataGridView est en mode d’édition. L’événement n’est pas déclenché, car le contenu de la cellule pointée est affiché sous la forme d’une info-bulle au lieu d’être affiché dans la cellule.
Version introduite
3.1
Action recommandée
Refactorisez tout code qui dépend de l’événement CellFormatting pendant que le DataGridView est en mode édition.
Catégorie
Windows Forms
API affectées
Aucun
.NET Core 3.0
La police de contrôle par défaut a été modifiée en Segoe UI 9 pt
Description des modifications
Dans .NET Framework, la propriété Control.DefaultFont a été définie sur Microsoft Sans Serif 8.25 pt
. L’image suivante montre une fenêtre qui utilise la police par défaut.
À compter de .NET Core 3.0, la police par défaut est définie sur Segoe UI 9 pt
(la même police que SystemFonts.MessageBoxFont). En raison de cette modification, les formulaires et les contrôles ont été agrandis d'environ 27% pour s'adapter à la taille plus grande de la nouvelle police par défaut. Par exemple:
Cette modification a été apportée pour s’aligner sur les instructions relatives à l’expérience utilisateur (UX) Windows.
Version introduite
3.0
Action recommandée
En raison de la modification de la taille des formulaires et des contrôles, assurez-vous que votre application s’affiche correctement.
Pour conserver la police d’origine d’un formulaire unique, définissez sa police par défaut sur Microsoft Sans Serif 8.25 pt
. Par exemple:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Vous pouvez également modifier la police par défaut d’une application entière de l’une des manières suivantes :
En définissant la propriété MSBuild
ApplicationDefaultFont
sur « Microsoft Sans Serif, 8.25pt ». Il s’agit de la technique préférée, car elle permet à Visual Studio d’utiliser les nouveaux paramètres dans le concepteur.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>
En appelant 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()); } }
Catégorie
- Windows Forms
API affectées
Aucun.
Modernisation de FolderBrowserDialog
Le contrôle FolderBrowserDialog a changé dans les applications Windows Forms pour .NET Core.
Description des modifications
Dans le .NET Framework, Windows Forms utilise la boîte de dialogue suivante pour le contrôle FolderBrowserDialog :
Dans .NET Core 3.0, Windows Forms utilise un contrôle COM plus récent introduit dans Windows Vista :
Version introduite
3.0
Action recommandée
La boîte de dialogue est automatiquement mise à niveau.
Si vous souhaitez conserver la boîte de dialogue d’origine, définissez la propriété FolderBrowserDialog.AutoUpgradeEnabled sur false
avant d’afficher la boîte de dialogue, comme illustré par le fragment de code suivant :
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Catégorie
Windows Forms
API affectées
SerializableAttribute supprimé de certains types Windows Forms
Le SerializableAttribute a été supprimé de certaines classes Windows Forms qui n’ont aucun scénario de sérialisation binaire connu.
Description des modifications
Les types suivants sont décorés avec la SerializableAttribute dans .NET Framework, mais l’attribut a été supprimé dans .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
Historiquement, ce mécanisme de sérialisation a eu de graves problèmes de maintenance et de sécurité. La maintenance SerializableAttribute
sur les types signifie que ces types doivent être testés pour les modifications de sérialisation de version à version et potentiellement les modifications de sérialisation de framework à framework. Cela rend plus difficile l’évolution de ces types et peut être coûteux à maintenir. Ces types n’ont aucun scénario de sérialisation binaire connu, ce qui réduit l’impact de la suppression de l’attribut.
Pour plus d'informations, voir Sérialisation binaire.
Version introduite
3.0
Action recommandée
Mettez à jour tout code qui peut dépendre de ces types marqués comme sérialisables.
Catégorie
Windows Forms
API affectées
- Aucun
Commutateur de compatibilité AllowUpdateChildControlIndexForTabControls non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
est pris en charge dans Windows Forms sur .NET Framework 4.6 et versions ultérieures, mais il n’est pas pris en charge sur .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
Dans .NET Framework 4.6 et versions ultérieures, la sélection d’un onglet réorganise sa collection de contrôles. Le commutateur de compatibilité Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
permet à une application d’ignorer cette réorganisation lorsque ce comportement n’est pas souhaitable.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
- Aucun
Commutateur de compatibilité DomainUpDown.UseLegacyScrolling non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
, introduit dans .NET Framework 4.7.1, n’est pas pris en charge dans Windows Forms sur .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
À compter de .NET Framework 4.7.1, le commutateur de compatibilité Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
a permis aux développeurs de refuser les actions indépendantes de DomainUpDown.DownButton() et de DomainUpDown.UpButton(). Le commutateur a restauré le comportement hérité, dans lequel le DomainUpDown.UpButton() est ignoré si le texte de contexte est présent, et le développeur doit utiliser l'action DomainUpDown.DownButton() sur le contrôle avant d'exécuter l'action DomainUpDown.UpButton(). Pour plus d’informations, consultez l’élément <AppContextSwitchOverrides>.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
Commutateur de compatibilité DoNotLoadLatestRichEditControl non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.UseLegacyImages
, introduit dans .NET Framework 4.7.1, n’est pas pris en charge dans Windows Forms sur .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
Dans .NET Framework 4.6.2 et les versions précédentes, le contrôle RichTextBox instancie le contrôle RichEdit Win32 v3.0 et pour les applications qui ciblent .NET Framework 4.7.1, le contrôle RichTextBox instancie RichEdit v4.1 (dans msftedit.dll). Le commutateur de compatibilité Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
a été introduit pour permettre aux applications qui ciblent .NET Framework 4.7.1 et versions ultérieures de refuser le nouveau contrôle RichEdit v4.1 et d’utiliser l’ancien contrôle RichEdit v3 à la place.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
n’est pas pris en charge. Seules les nouvelles versions du contrôle RichTextBox sont prises en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
Commutateur de compatibilité DoNotSupportSelectAllShortcutInMultilineTextBox non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
, introduit dans .NET Framework 4.6.1, n’est pas pris en charge dans Windows Forms sur .NET Core et .NET 5.0 et versions ultérieures.
Description des modifications
À partir de .NET Framework 4.6.1, la sélection de la touche de raccourci Ctrl + A dans un contrôle TextBox permet de sélectionner tout le texte. Dans .NET Framework 4.6 et les versions précédentes, la sélection de la touche de raccourciSwitch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
a été introduit dans .NET Framework 4.6.1 pour conserver le comportement d’origine. Pour plus d’informations, consultez TextBox.ProcessCmdKey.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
- Aucun
Commutateur de compatibilité DontSupportReentrantFilterMessage non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
, introduit dans .NET Framework 4.6.1, n’est pas pris en charge dans Windows Forms sur .NET Core et .NET 5.0 et versions ultérieures.
Description des modifications
À compter du .NET Framework 4.6.1, le commutateur de compatibilité Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
résout les exceptions possibles IndexOutOfRangeException lorsque le message Application.FilterMessage est appelé avec une implémentation de IMessageFilter.PreFilterMessage personnalisée. Pour plus d’informations, consultez Atténuation : implémentations IMessageFilter.PreFilterMessage personnalisées.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
Commutateur de compatibilité EnableVisualStyleValidation non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.EnableVisualStyleValidation
n’est pas supporté dans Windows Forms sous .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
Dans .NET Framework, le commutateur de compatibilité Switch.System.Windows.Forms.EnableVisualStyleValidation
a permis à une application de refuser la validation des styles visuels fournis dans un formulaire numérique.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.EnableVisualStyleValidation
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
- Aucun
Commutateur de compatibilité UseLegacyContextMenuStripSourceControlValue non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
, qui a été introduit dans .NET Framework 4.7.2, n’est pas pris en charge dans Windows Forms sur .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
À compter de .NET Framework 4.7.2, le commutateur de compatibilité Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
permet au développeur de refuser le nouveau comportement de la propriété ContextMenuStrip.SourceControl, qui retourne désormais une référence au contrôle de code source. Le comportement précédent de la propriété était de retourner null
. Pour plus d’informations, consultez l’élément <AppContextSwitchOverrides>.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
Commutateur de compatibilité UseLegacyImages non pris en charge
Le commutateur de compatibilité Switch.System.Windows.Forms.UseLegacyImages
, qui a été introduit dans .NET Framework 4.8, n’est pas pris en charge dans Windows Forms sur .NET Core ou .NET 5.0 et versions ultérieures.
Description des modifications
À compter de .NET Framework 4.8, le commutateur de compatibilité Switch.System.Windows.Forms.UseLegacyImages
a résolu les problèmes de mise à l’échelle d’images possibles dans les scénarios ClickOnce dans des environnements DPI élevés. Lorsqu’il est défini sur true
, le commutateur permet à l’utilisateur de restaurer la mise à l’échelle d’images héritées sur des écrans haute résolution dont la mise à l’échelle est définie sur plus de 100%. Pour plus d’informations, consultez les notes de publication de .NET Framework 4.8 sur GitHub.
Dans .NET Core et .NET 5.0 et versions ultérieures, le commutateur Switch.System.Windows.Forms.UseLegacyImages
n’est pas pris en charge.
Version introduite
3.0
Action recommandée
Supprimez le commutateur. Le commutateur n’est pas pris en charge et aucune autre fonctionnalité n’est disponible.
Catégorie
Windows Forms
API affectées
- Aucun
Les modèles À propos et SplashScreen sont cassés
Les fichiers About.vb
et SplashScreen.vb
générés par Visual Studio contiennent des références aux types dans l’espace de noms My
qui ne sont pas disponibles .NET Core 3.0 et 3.1.
Version introduite
3.0
Description des modifications
.NET Core 3.0 et 3.1 ne contiennent pas de prise en charge complète de Visual Basic My
. Les modèles de formulaires About et SplashScreen dans les applications Visual Studio pour Visual Basic Windows Forms font référence aux propriétés du type My.Application.Info
qui ne sont pas disponibles.
Action recommandée
La prise en charge de Visual Basic My
a été améliorée dans .NET 5, mettez à niveau votre projet vers .NET 5 ou version ultérieure.
ou
Corrigez les erreurs du compilateur dans les types About et SplashScreen dans votre application. Utilisez la classe System.Reflection.Assembly
pour obtenir les informations fournies par le type de My.Application.Info
. Un port normal des deux formulaires est disponible ici.
Conseil
Il s’agit d’exemples de code et non optimisé. La liste des attributs doit être mise en cache pour réduire le temps de chargement du formulaire.
À propos de
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
Catégorie
Visual Basic Windows Forms
API affectées
Aucun
Types dans l’espace de noms Microsoft.VisualBasic.ApplicationServices non disponibles
Les types de l’espace de noms Microsoft.VisualBasic.ApplicationServices ne sont pas disponibles.
Version introduite
.NET Core 3.0
Description des modifications
Les types de l’espace de noms Microsoft.VisualBasic.ApplicationServices étaient disponibles dans .NET Framework. Ils ne sont pas disponibles dans .NET Core 3.0 - 3.1.
Les types ont été supprimés pour éviter les dépendances d’assembly inutiles ou les changements cassants dans les versions suivantes.
Action recommandée
Cet espace de noms a été ajouté dans .NET 5, mettez à niveau votre projet vers .NET 5 ou version ultérieure.
ou
Si votre code dépend de l’utilisation de types Microsoft.VisualBasic.ApplicationServices et de leurs membres, vous pouvez utiliser un type ou un membre correspondant dans la bibliothèque de classes .NET. Par exemple, certains membres System.Environment et System.Security.Principal.WindowsIdentity fournissent des fonctionnalités équivalentes aux propriétés de la classe Microsoft.VisualBasic.ApplicationServices.User.
Catégorie
Visual Basic
API affectées
Types dans l’espace de noms Microsoft.VisualBasic.Devices non disponibles
Les types de l’espace de noms Microsoft.VisualBasic.Devices ne sont pas disponibles.
Version introduite
.NET Core 3.0
Description des modifications
Les types de l’espace de noms Microsoft.VisualBasic.Devices étaient disponibles dans .NET Framework. Ils ne sont pas disponibles dans .NET Core 3.0 - 3.1.
Les types ont été supprimés pour éviter les dépendances d’assembly inutiles ou les changements cassants dans les versions suivantes.
Action recommandée
Cet espace de noms a été ajouté dans .NET 5, mettez à niveau votre projet vers .NET 5 ou version ultérieure.
ou
Si votre code dépend de l’utilisation de types Microsoft.VisualBasic.Devices et de leurs membres, vous pouvez utiliser un type ou un membre correspondant dans la bibliothèque de classes .NET. Par exemple, les fonctionnalités équivalentes à la classe Microsoft.VisualBasic.Devices.Clock sont fournies par les types System.DateTime et System.Environment, et les fonctionnalités équivalentes à la classe Microsoft.VisualBasic.Devices.Ports sont fournies par les types dans l’espace de noms System.IO.Ports.
Catégorie
Visual Basic
API affectées
Types dans l’espace de noms Microsoft.VisualBasic.MyServices non disponibles
Les types de l’espace de noms Microsoft.VisualBasic.MyServices ne sont pas disponibles.
Version introduite
.NET Core 3.0
Description des modifications
Les types de l’espace de noms Microsoft.VisualBasic.MyServices étaient disponibles dans .NET Framework. Ils ne sont pas disponibles dans .NET Core 3.0 - 3.1.
Les types ont été supprimés pour éviter les dépendances d’assembly inutiles ou les changements cassants dans les versions suivantes.
Action recommandée
Cet espace de noms a été ajouté dans .NET 5, mettez à niveau votre projet vers .NET 5 ou version ultérieure.
ou
Si votre code dépend de l’utilisation de Microsoft.VisualBasic.MyServices types et leurs membres, il existe des types et des membres correspondants dans la bibliothèque de classes .NET. Voici un mappage des types Microsoft.VisualBasic.MyServices à leurs types de bibliothèque de classes .NET équivalents :
Type de Microsoft.VisualBasic.MyServices | Type de bibliothèque de classes .NET |
---|---|
ClipboardProxy | System.Windows.Clipboard pour les applications WPF, System.Windows.Forms.Clipboard pour les applications Windows Forms |
FileSystemProxy | Types dans l'espace de noms System.IO |
RegistryProxy | Types liés au Registre dans l’espace de noms Microsoft.Win32 |
SpecialDirectoriesProxy | Environment.GetFolderPath |
Catégorie
Visual Basic