Oförenliga ändringar för migrering från .NET Framework till .NET Core
Om du migrerar en app från .NET Framework till .NET Core versionerna 1.0 till 3.1 kan de brytpunktsförändringar som anges i den här artikeln påverka dig. Icke-bakåtkompatibla ändringar grupperas efter kategori och inom dessa kategorier efter den version av .NET Core som de introducerades i.
Anteckning
Den här artikeln är inte en fullständig lista över större förändringar mellan .NET Framework och .NET Core. De viktigaste ändringarna som bryter kompatibiliteten läggs till här när vi upptäcker dem.
De grundläggande .NET-biblioteken
- Ändra standardvärdet för UseShellExecute
- IDispatchImplAttribute API tas bort
- UnauthorizedAccessException som genereras av FileSystemInfo.Attributes
- Hantering av undantag för skadade processer stöds inte
- UriBuilder-egenskaper förbereder inte längre inledande tecken
- Process.StartInfo genererar InvalidOperationException för processer som du inte startade
.NET 8
IDispatchImplAttribute API tas bort
.NET Core 2.1
Ändra standardvärdet för UseShellExecute
ProcessStartInfo.UseShellExecute har standardvärdet false
på .NET Core. På .NET Framework är standardvärdet true
.
Ändra beskrivning
Process.Start kan du starta ett program direkt, till exempel med kod som Process.Start("mspaint.exe")
som startar Paint. Du kan också indirekt starta ett associerat program om ProcessStartInfo.UseShellExecute är inställt på true
. På .NET Framework är standardvärdet för ProcessStartInfo.UseShellExecutetrue
, vilket innebär att kod som Process.Start("mytextfile.txt")
startar Anteckningar om du har associerat .txt filer med redigeraren. Om du vill förhindra att en app startas indirekt på .NET Framework måste du uttryckligen ange ProcessStartInfo.UseShellExecute till false
. På .NET Core är standardvärdet för ProcessStartInfo.UseShellExecutefalse
. Det innebär att associerade program som standard inte startas när du anropar Process.Start
.
Följande egenskaper på System.Diagnostics.ProcessStartInfo fungerar bara när ProcessStartInfo.UseShellExecute är true
:
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
Den här ändringen introducerades i .NET Core av prestandaskäl. Vanligtvis används Process.Start för att starta ett program direkt. Att starta en app direkt behöver inte omfatta Windows-gränssnittet och medföra den associerade prestandakostnaden. För att göra det här standardfallet snabbare ändrar .NET Core standardvärdet för ProcessStartInfo.UseShellExecute till false
. Du kan välja den långsammare sökvägen om du behöver den.
Version introducerad
2.1
Not
I tidigare versioner av .NET Core implementerades inte UseShellExecute
för Windows.
Rekommenderad åtgärd
Om din app förlitar sig på det gamla beteendet anropar du Process.Start(ProcessStartInfo) med UseShellExecute inställt på true
på ProcessStartInfo-objektet.
Kategori
.NET Core-bibliotek
Berörda API:er
.NET Core 1.0
UnauthorizedAccessException genereras av FileSystemInfo.Attributes
I .NET Core utlöses en UnauthorizedAccessException när anroparen försöker ange ett filattributvärde men inte har skrivbehörighet.
Ändra beskrivning
I .NET Framework utlöses en ArgumentException när anroparen försöker ange ett filattributvärde i FileSystemInfo.Attributes men inte har skrivbehörighet. I .NET Core kastas en UnauthorizedAccessException istället. (I .NET Core utlöses fortfarande en ArgumentException om anroparen försöker ange ett ogiltigt filattribut.)
Version infördes
1.0
Rekommenderad åtgärd
Ändra eventuella catch
-uttalanden för att fånga en UnauthorizedAccessException istället för, eller i tillägg till, en ArgumentException, efter behov.
Kategori
Core .NET-bibliotek
Berörda API:er
Hantering av korrupta tillståndsundantag stöds inte
Det är inte möjligt att hantera undantag för korrupt processstatus i .NET Core.
Ändra beskrivning
Tidigare kunde undantag för korrupt processtillstånd fångas upp och hanteras av undantagshanterare för hanterad kod, till exempel med hjälp av en try-catch-instruktion i C#.
Från och med .NET Core 1.0 kan undantag för skadat processtillstånd inte hanteras av hanterad kod. Common Language Runtime levererar inte undantag för korrupta processstatus till hanterad kod.
Version introducerad
1.0
Rekommenderad åtgärd
Undvik behovet av att hantera undantag för skadade processer genom att ta itu med de situationer som leder till dem i stället. Om det är absolut nödvändigt att hantera undantag för skadat processtillstånd skriver du undantagshanteraren i C- eller C++-kod.
Kategori
.NET Core-bibliotek
Berörda API:er
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- elementet för LegacyCorruptedStateExceptionsPolicy
UriBuilder-egenskaper förbereder inte längre inledande tecken
UriBuilder.Fragment lägger inte längre till ett inledande #
tecken och UriBuilder.Query lägger inte längre till ett inledande ?
tecken när det redan finns.
Ändra beskrivning
I .NET Framework lägger egenskaperna UriBuilder.Fragment och UriBuilder.Query alltid till ett #
- eller ?
-tecken till det värde som lagras. Det här beteendet kan resultera i flera #
eller ?
tecken i det lagrade värdet om strängen redan innehåller något av dessa inledande tecken. Värdet för UriBuilder.Fragment kan till exempel bli ##main
.
Från och med .NET Core 1.0 lägger dessa egenskaper inte längre till #
eller ?
till det lagrade värdet om de redan finns i början av strängen.
Version införd
1.0
Rekommenderad åtgärd
Du behöver inte längre uttryckligen ta bort något av dessa inledande tecken när du anger egenskapsvärdena. Detta är särskilt användbart när du lägger till värden eftersom du inte längre behöver ta bort inledande #
eller ?
varje gång du lägger till.
Följande kodfragment visar till exempel beteendeskillnaden mellan .NET Framework och .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);
- I .NET Framework är det resulterande värdet
????one=1&two=2&three=3&four=4
. - I .NET Core så är resultatet
?one=1&two=2&three=3&four=4
.
Kategori
Core .NET-biblioteken
Berörda API:er
Process.StartInfo genererar InvalidOperationException för processer som du inte startade
Att läsa egenskapen Process.StartInfo för processer som din kod inte startade gör att en InvalidOperationExceptionutlöses.
Ändra beskrivning
I .NET Framework, att få åtkomst till egenskapen Process.StartInfo för processer som din kod inte startade returnerar ett dummy-ProcessStartInfo-objekt. Dummy-objektet innehåller standardvärden för alla dess egenskaper förutom EnvironmentVariables.
Från och med .NET Core 1.0, om du läser egenskapen Process.StartInfo för en process som du inte startade (dvs. genom att anropa Process.Start) genereras en InvalidOperationException.
Version släppt
1.0
Rekommenderad åtgärd
Använd inte egenskapen Process.StartInfo för processer som koden inte startade. Läs till exempel inte den här egenskapen för processer som returneras av Process.GetProcesses.
Kategori
Core .NET-bibliotek
Berörda API:er
Kryptografi
.NET Core 2.1
Boolesk parameter för SignedCms.ComputeSignature respekteras
I .NET Core respekteras parametern Booleskt silent
för metoden SignedCms.ComputeSignature(CmsSigner, Boolean). En PIN-fråga visas inte om den här parametern är inställd på true
.
Ändra beskrivning
I .NET Framework ignoreras parametern silent
för metoden SignedCms.ComputeSignature(CmsSigner, Boolean) och en PIN-fråga visas alltid om det krävs av providern. I .NET Core respekteras parametern silent
och om den är inställd på true
visas aldrig en PIN-fråga, även om den krävs av providern.
Stöd för CMS/PKCS #7-meddelanden introducerades i .NET Core i version 2.1.
Version introducerad
2.1
Rekommenderad åtgärd
För att säkerställa att en PIN-fråga visas om det behövs bör skrivbordsprogram anropa SignedCms.ComputeSignature(CmsSigner, Boolean) och ange den booleska parametern till false
. Det resulterande beteendet är detsamma som i .NET Framework oavsett om den tysta kontexten är inaktiverad där.
Kategori
Kryptografi
Berörda API:er
MSBuild
.NET Core 3.0
Namnändring för resursmanifestfil
Från och med .NET Core 3.0 genererar MSBuild i standardfallet ett annat manifestfilnamn för resursfiler.
Version införd
3.0
Ändra beskrivning
Om inga LogicalName
, ManifestResourceName
eller DependentUpon
metadata angavs för ett EmbeddedResource
objekt i projektfilen innan .NET Core 3.0 genererade MSBuild ett manifestfilnamn i mönstret <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Om RootNamespace
inte har definierats i projektfilen är projektnamnet som standard. Det genererade manifestnamnet för en resursfil med namnet Form1.resx i rotprojektkatalogen var till exempel MyProject.Form1.resources.
Från och med .NET Core 3.0, om en resursfil samplaceras med en källfil med samma namn (till exempel Form1.resx och Form1.cs), använder MSBuild typinformation från källfilen för att generera manifestfilens namn i mönstret <Namespace>.<ClassName>.resources
. Namnområdet och klassnamnet extraheras från den första typen i den samlokaliserade källfilen. Det genererade manifestnamnet för en resursfil med namnet Form1.resx som är samlokaliserat med en källfil med namnet Form1.cs är MyNamespace.Form1.resources. Det viktigaste att notera är att den första delen av filnamnet skiljer sig från tidigare versioner av .NET Core (MyNamespace i stället för MyProject).
Not
Om du har LogicalName
, ManifestResourceName
eller DependentUpon
metadata som angetts för ett EmbeddedResource
objekt i projektfilen påverkar inte den här ändringen resursfilen.
Den här brytande ändringen introducerades genom att lägga till egenskapen EmbeddedResourceUseDependentUponConvention
till .NET Core-projekt. Som standard visas inte resursfiler uttryckligen i en .NET Core-projektfil, så de har inga DependentUpon
metadata för att ange hur du namnger den genererade .resources-filen. När EmbeddedResourceUseDependentUponConvention
är inställt på true
, som är standard, letar MSBuild efter en källfil placerad i samma katalog och extraherar ett namespace och klassnamn från filen. Om du anger EmbeddedResourceUseDependentUponConvention
till false
genererar MSBuild manifestnamnet enligt det tidigare beteendet, som kombinerar RootNamespace
och den relativa filsökvägen.
Rekommenderad åtgärd
I de flesta fall krävs ingen åtgärd från utvecklarens sida, och din app bör fortsätta att fungera. Men om den här ändringen bryter din app kan du antingen:
Ändra koden så att den förväntar sig det nya manifestnamnet.
Avregistrera dig från den nya namngivningskonventionen genom att ange
EmbeddedResourceUseDependentUponConvention
tillfalse
i projektfilen.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategori
MSBuild
Berörda API:er
Ej tillämpligt
Nätverkande
.NET Core 2.0
WebClient.CancelAsync stoppar inte alltid omedelbart
Från och med .NET Core 2.0 avbryter inte WebClient.CancelAsync() begäran omedelbart om svaret har börjat hämtas.
Ändra beskrivning
Tidigare avbröt WebClient.CancelAsync() begäran omedelbart. Från och med .NET Core 2.0 avbryter anropet WebClient.CancelAsync() begäran omedelbart endast om svaret inte har börjat hämtas. Om svaret har börjat hämtas avbryts begäran först när ett fullständigt svar har lästs.
Den här ändringen implementerades eftersom WebClient-API:et är inaktuellt till förmån för HttpClient.
Version släpptes
2.0
Rekommenderad åtgärd
Använd klassen System.Net.Http.HttpClient i stället för System.Net.WebClient, som är inaktuell.
Kategori
Nätverkande
Berörda API:er
Windows-formulär
Stöd för Windows Forms har lagts till i .NET Core i version 3.0. Om du migrerar en Windows Forms-app från .NET Framework till .NET Core kan de kompatibilitetsbrytande ändringarna som anges här påverka din app.
- Borttagna kontroller
- CellFormatting-händelsen utlöses inte om verktygstipset visas
- Control.DefaultFont har ändrats till Segoe UI 9 pt
- Modernisering av FolderBrowserDialog
- SerializableAttribute har tagits bort från vissa Typer av Windows-formulär
- Den AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte
- DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte
- DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte
- DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte
- DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte
- EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte
- UseLegacyContextMenuStripSourceControlValue-kompatibilitetsväxeln stöds inte
- UseLegacyImages kompatibilitetsväxel stöds inte
- Om- och SplashScreen-mallar är brutna för Visual Basic
- Typerna i namnområdet Microsoft.VisualBasic.ApplicationServices är inte tillgängliga
- Typer i namnområdet Microsoft.VisualBasic.Devices är inte tillgängliga
- Typer i Microsoft.VisualBasic.MyServices-namnområdet är inte tillgängligt
.NET Core 3.1
Borttagna kontroller
Från och med .NET Core 3.1 är vissa Windows Forms-kontroller inte längre tillgängliga.
Ändra beskrivning
Från och med .NET Core 3.1 är olika Windows Forms-kontroller inte längre tillgängliga. Ersättningskontroller som har bättre design och stöd introducerades i .NET Framework 2.0. De inaktuella kontrollerna har tidigare tagits bort från designerverktygslådor men var fortfarande tillgängliga för användning.
Följande typer är inte längre tillgängliga:
- 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 lanserades
3.1
Rekommenderad åtgärd
Varje borttagen kontroll har en rekommenderad ersättningskontroll. Se följande tabell:
Borttagen styrning (API) | Rekommenderad ersättning | Associerade API:er som tas bort |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Huvudmeny | MenuStrip | |
Meny | ToolStripDropDown, ToolStripDropDownMenu | Menyobjektsamling |
Menyobjekt | ToolStripMenuItem | |
Verktygsfält | ToolStrip | Verktygsfältsutseende |
Verktygsfältsknapp | VerktygsradsKnapp | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategori
Windows-formulär
Berörda API:er
- 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
Cellformateringshändelsen aktiveras inte om verktygstipset visas
En DataGridView visar nu en cels text- och feltips när markören svävar över och när den väljs via tangentbordet. Om en verktygstips visas, utlöses inte DataGridView.CellFormatting-händelsen.
Ändra beskrivning
Före .NET Core 3.1 visade en DataGridView som hade egenskapen ShowCellToolTips inställd på true
ett verktygstips för en cells text och fel när muspekaren svävade över cellen. Verktygstips visades inte när en cell valdes med tangentbordet (till exempel genom att använda Tab-tangenten, genvägstangenter eller piltangenterna). Om användaren redigerade en cell och sedan, medan DataGridView fortfarande var i redigeringsläge, hovrade över en cell som inte hade egenskapen ToolTipText inställd, uppstod en CellFormatting händelse för att formatera cellens text för visning i cellen.
För att uppfylla tillgänglighetsstandarderna, från och med .NET Core 3.1, visar en DataGridView som har egenskapen ShowCellToolTips inställd på true
knappbeskrivningar för en cells text och fel, inte bara när cellen hovrar, utan även när den väljs via tangentbordet. Till följd av den här ändringen utlöses CellFormatting-händelsen inte när celler som inte har egenskapen ToolTipText inställd hovras medan DataGridView är i redigeringsläge. Händelsen aktiveras inte eftersom innehållet i den cell som pekas på visas som ett verktygstips i stället för att visas i cellen.
Version infördes
3.1
Rekommenderad åtgärd
Omstrukturera all kod som är beroende av den CellFormatting händelsen medan DataGridView är i redigeringsläge.
Kategori
Windows-formulär
Berörda API:er
Ingen
.NET Core 3.0
Standardkontrollteckensnittet har ändrats till Segoe UI 9 pt
Ändra beskrivning
I .NET Framework har egenskapen Control.DefaultFont angetts till Microsoft Sans Serif 8.25 pt
. Följande bild visar ett fönster som använder standardteckensnittet.
Från och med .NET Core 3.0 är standardteckensnittet inställt på Segoe UI 9 pt
(samma teckensnitt som SystemFonts.MessageBoxFont). Som ett resultat av den här ändringen är formulär och kontroller ungefär 27% större för att ta hänsyn till den större storleken på det nya standardteckensnittet. Till exempel:
Den här ändringen gjordes i enlighet med riktlinjer för Windows-användarupplevelse (UX).
Version introducerad
3.0
Rekommenderad åtgärd
På grund av ändringen i storleken på formulär och kontroller kontrollerar du att programmet renderas korrekt.
Om du vill behålla det ursprungliga teckensnittet för ett enskilt formulär anger du standardteckensnittet till Microsoft Sans Serif 8.25 pt
. Till exempel:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Du kan också ändra standardteckensnittet för ett helt program på något av följande sätt:
Genom att ange egenskapen
ApplicationDefaultFont
MSBuild till "Microsoft Sans Serif, 8.25pt". Det här är den bästa tekniken eftersom det gör att Visual Studio kan använda de nya inställningarna i designern.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>
Genom att anropa 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()); } }
Kategori
- Windows-formulär
Berörda API:er
Ingen.
Modernisering av FolderBrowserDialog
Kontrollen FolderBrowserDialog har ändrats i Windows Forms-program för .NET Core.
Ändra beskrivning
I .NET Framework använder Windows-formulär följande dialogruta för FolderBrowserDialog-kontrollen:
I .NET Core 3.0 använder Windows Forms en nyare COM-baserad kontroll som introducerades i Windows Vista:
Version introducerad
3.0
Rekommenderad åtgärd
Dialogrutan uppgraderas automatiskt.
Om du vill behålla den ursprungliga dialogrutan anger du egenskapen FolderBrowserDialog.AutoUpgradeEnabled till false
innan du visar dialogrutan, vilket illustreras av följande kodfragment:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Kategori
Windows-formulär
Berörda API:er
SerializableAttribute har tagits bort från vissa Typer av Windows-formulär
SerializableAttribute har tagits bort från vissa Windows Forms-klasser som inte har några kända scenarier med binär serialisering.
Ändra beskrivning
Följande typer är dekorerade med SerializableAttribute i .NET Framework, men attributet har tagits bort i .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
Tidigare har den här serialiseringsmekanismen haft allvarliga underhålls- och säkerhetsproblem. Att underhålla SerializableAttribute
på typer innebär att dessa typer måste testas för serialiseringsändringar från version till version och potentiellt serialiseringsändringar från ramverk till ramverk. Detta gör det svårare att utveckla dessa typer och kan vara kostsamt att underhålla. Dessa typer har inga kända scenarier för binär serialisering, vilket minimerar effekten av att ta bort attributet.
För mer information, se binär serialisering.
Version införd
3.0
Rekommenderad åtgärd
Uppdatera all kod som kan vara beroende av att dessa typer markeras som serialiserbara.
Kategori
Windows-formulär
Berörda API:er
- Ingen
AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
stöds i Windows Forms i .NET Framework 4.6 och senare versioner, men stöds inte på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework 4.6 och senare versioner ordnas kontrollsamlingen om när du väljer en flik. Med Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
kompatibilitetsväxel kan ett program hoppa över den här omordningen när det här beteendet är oönskat.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.1 tillät Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
-kompatibilitetsväxlingen utvecklare att välja bort oberoende åtgärder för DomainUpDown.DownButton() och DomainUpDown.UpButton(). Växeln återställde det äldre beteendet, där DomainUpDown.UpButton() ignoreras om kontexttext finns, och utvecklaren måste använda DomainUpDown.DownButton() åtgärd på kontrollen innan åtgärden DomainUpDown.UpButton(). Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
.
Version införd
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.UseLegacyImages
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework 4.6.2 och tidigare versioner instansierar RichTextBox kontrollen Win32 RichEdit-kontrollen v3.0 och för program som riktar in sig på .NET Framework 4.7.1 instansierar RichTextBox kontrollen RichEdit v4.1 (i msftedit.dll). Den Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
kompatibilitetsväxeln introducerades för att tillåta program som riktar sig mot .NET Framework 4.7.1 och senare versioner att välja bort den nya RichEdit v4.1-kontrollen och använda den gamla RichEdit v3-kontrollen i stället.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
. Endast nya versioner av RichTextBox-kontrollen stöds.
Version infördes
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 väljer du Ctrl + En genvägsnyckel i en TextBox kontroll markerade all text. I .NET Framework 4.6 och tidigare versioner kunde du inte välja Ctrl + En genvägsnyckel kunde inte markera all text om Textbox.ShortcutsEnabled och TextBox.Multiline egenskaper båda var inställda på true
. Kompatibilitetsväxeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
introducerades i .NET Framework 4.6.1 för att behålla det ursprungliga beteendet. Mer information finns i TextBox.ProcessCmdKey.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 löser Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
kompatibilitetsväxling möjliga IndexOutOfRangeException undantag när Application.FilterMessage-meddelandet anropas med en anpassad IMessageFilter.PreFilterMessage implementering. Mer information finns i Mitigation: Custom IMessageFilter.PreFilterMessage Implementations.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.EnableVisualStyleValidation
stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework tillät Switch.System.Windows.Forms.EnableVisualStyleValidation
-kompatibilitetsväxeln en applikation att inte delta i valideringen av visuella format som tillhandahålls i numerisk form.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.EnableVisualStyleValidation
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Kompatibilitetsväxeln UseLegacyContextMenuStripSourceControlValue stöds inte
Den Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.2, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.2 gör Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kompatibilitetsväxeln att utvecklaren kan välja bort det nya beteendet för egenskapen ContextMenuStrip.SourceControl, som nu returnerar en referens till källkontrollen. Det tidigare beteendet för egenskapen var att returnera null
. Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
UseLegacyImages kompatibilitetsväxel stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.UseLegacyImages
, som introducerades i .NET Framework 4.8, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.8 åtgärdade Switch.System.Windows.Forms.UseLegacyImages
kompatibilitetsväxeln möjliga problem med bildskalning i ClickOnce-scenarier i miljöer med hög DPI. När den är inställd på true
tillåter växeln att användaren återställer äldre bildskalning på höga DPI-skärmar vars skala är inställd på större än 100%. Mer information finns i .NET Framework 4.8 Versionsinformation på GitHub.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyImages
.
Version introducerad
3.0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Både Om- och SplashScreen-mallar är brutna
De About.vb
- och SplashScreen.vb
filer som genereras av Visual Studio innehåller referenser till typer i My
namnrymd som inte är tillgängliga .NET Core 3.0 och 3.1.
Version introducerad
3.0
Ändra beskrivning
.NET Core 3.0 och 3.1 innehåller inte fullständigt stöd för Visual Basic My
. Referensegenskaperna i Om och SplashScreen formulärmallar i Visual Studio för Visual Basic Windows Forms-appar refererar till My.Application.Info
-typen som inte är tillgänglig.
Rekommenderad åtgärd
Stöd för Visual Basic My
har förbättrats i .NET 5, uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Åtgärda kompilatorfelen i Om och SplashScreen typerna i din app. Använd klassen System.Reflection.Assembly
för att hämta den information som tillhandahålls av My.Application.Info
typ. En rak port för båda formulären finns här.
Tips
Det här är exempelkod och ej optimerad. Listan över attribut ska cachelagras för att minska tiden för formulärinläsning.
Om
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
Kategori
Visual Basic Windows Forms
Berörda API:er
Ingen
Typer i namnområdet Microsoft.VisualBasic.ApplicationServices är inte tillgängliga
Typerna i Microsoft.VisualBasic.ApplicationServices namnområdet är inte tillgängliga.
Version införd
.NET Core 3.0
Ändra beskrivning
Typerna i Microsoft.VisualBasic.ApplicationServices namnområdet var tillgängliga i .NET Framework. De är inte tillgängliga i .NET Core 3.0 – 3.1.
Typerna togs bort för att undvika onödiga sammansättningsberoenden eller icke-bakåtkompatibla ändringar i efterföljande versioner.
Rekommenderad åtgärd
Det här namnområdet lades till i .NET 5, uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Om koden är beroende av användningen av Microsoft.VisualBasic.ApplicationServices typer och deras medlemmar kan du kanske använda en motsvarande typ eller medlem i .NET-klassbiblioteket. Vissa System.Environment och System.Security.Principal.WindowsIdentity medlemmar ger till exempel motsvarande funktioner till egenskaperna för klassen Microsoft.VisualBasic.ApplicationServices.User.
Kategori
Visual Basic
Berörda API:er
Typer i Microsoft.VisualBasic.Devices-namnområdet är inte tillgängligt
Typerna i Microsoft.VisualBasic.Devices namnområdet är inte tillgängliga.
Version införd
.NET Core 3.0
Ändra beskrivning
Typerna i Microsoft.VisualBasic.Devices namnområdet var tillgängliga i .NET Framework. De är inte tillgängliga i .NET Core 3.0 – 3.1.
Typerna togs bort för att undvika onödiga sammansättningsberoenden eller icke-bakåtkompatibla ändringar i efterföljande versioner.
Rekommenderad åtgärd
Det här namnområdet lades till i .NET 5. Uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Om koden är beroende av användningen av Microsoft.VisualBasic.Devices typer och deras medlemmar kan du kanske använda en motsvarande typ eller medlem i .NET-klassbiblioteket. Motsvarande funktioner för klassen Microsoft.VisualBasic.Devices.Clock tillhandahålls till exempel av System.DateTime- och System.Environment-typerna, och motsvarande funktioner för klassen Microsoft.VisualBasic.Devices.Ports tillhandahålls av typer i System.IO.Ports-namnområdet.
Kategori
Visual Basic
Berörda API:er
Typer i namnområdet Microsoft.VisualBasic.MyServices är inte tillgängliga
Typerna i Microsoft.VisualBasic.MyServices namnområdet är inte tillgängliga.
Version introducerad
.NET Core 3.0
Ändra beskrivning
Typerna i Microsoft.VisualBasic.MyServices namnområdet var tillgängliga i .NET Framework. De är inte tillgängliga i .NET Core 3.0 – 3.1.
Typerna togs bort för att undvika onödiga assembliesberoenden eller bakåtkompatibilitetsändringar i efterföljande versioner.
Rekommenderad åtgärd
Det här namnområdet lades till i .NET 5, så uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Om koden är beroende av användningen av Microsoft.VisualBasic.MyServices typer och deras medlemmar finns det motsvarande typer och medlemmar i .NET-klassbiblioteket. Följande är en mappning av Microsoft.VisualBasic.MyServices typer till motsvarande .NET-klassbibliotekstyper:
Microsoft.VisualBasic.MyServices-typ | .NET-klassbibliotekstyp |
---|---|
ClipboardProxy | System.Windows.Clipboard för WPF-program System.Windows.Forms.Clipboard för Windows Forms-program |
FileSystemProxy | Typer i System.IO namnområde |
RegistryProxy | Registerrelaterade typer i Microsoft.Win32 namnområde |
SpecialDirectoriesProxy | Environment.GetFolderPath |
Kategori
Visual Basic