A .NET-keretrendszer-ról a .NET Core-ba való migrálás kompatibilitástörő változásai
Ha egy alkalmazást .NET-keretrendszer-ről .NET Core 1.0-3.1-re migrál, a cikkben felsorolt kompatibilitástörő változások hatással lehetnek Önre. A kompatibilitástörő változások kategóriánként és ezen kategóriákon belül a .NET Core azon verziója szerint vannak csoportosítva, amelyben bevezették őket.
Feljegyzés
Ez a cikk nem a .NET-keretrendszer és a .NET Core közötti kompatibilitástörő változások teljes listáját tartalmazza. A legfontosabb kompatibilitástörő változások itt jelennek meg, amint tudomást szerezünk róluk.
Alapvető .NET-kódtárak
- A UseShellExecute alapértelmezett értékének módosítása
- Az IDispatchImplAttribute API el lett távolítva
- A FileSystemInfo.Attributes által elvetett UnauthorizedAccessException
- A sérült folyamatállapot-kivételek kezelése nem támogatott
- Az UriBuilder tulajdonságai már nem vannak előre felfűzve a bevezető karakterekre
- A Process.StartInfo érvénytelenOperationException parancsot ad a nem indult folyamatokhoz
.NET 8
Az IDispatchImplAttribute API el lett távolítva
.NET Core 2.1
A UseShellExecute alapértelmezett értékének módosítása
ProcessStartInfo.UseShellExecute alapértelmezett értéke false
a .NET Core. A .NET-keretrendszer alapértelmezett értéke .true
Módosítás leírása
Process.Start lehetővé teszi egy alkalmazás közvetlen elindítását, például olyan kóddal, amely Process.Start("mspaint.exe")
elindítja a Paintet. Azt is lehetővé teszi, hogy közvetetten elindítson egy társított alkalmazást, ha ProcessStartInfo.UseShellExecute be van állítva true
. A .NET-keretrendszer alapértelmezett értéke ProcessStartInfo.UseShellExecutetrue
a következő, ami azt jelenti, hogy a kód, például Process.Start("mytextfile.txt")
Jegyzettömb indulna el, ha .txt fájlokat társított a szerkesztőhöz. Ha meg szeretné akadályozni, hogy az alkalmazás indirekt módon elinduljon .NET-keretrendszer, explicit módon be kell állítania ProcessStartInfo.UseShellExecute a következőtfalse
: . A .NET Core-on az alapértelmezett érték ProcessStartInfo.UseShellExecute a következő false
: . Ez azt jelenti, hogy a társított alkalmazások alapértelmezés szerint nem indulnak el híváskor Process.Start
.
A következő tulajdonságok System.Diagnostics.ProcessStartInfo csak akkor működnek, haProcessStartInfo.UseShellExecute:true
- ProcessStartInfo.CreateNoWindow
- ProcessStartInfo.ErrorDialog
- ProcessStartInfo.Verb
- ProcessStartInfo.WindowStyle.
Ezt a módosítást teljesítménybeli okokból vezettük be a .NET Core-ban. Process.Start Általában egy alkalmazás közvetlen indítására szolgál. Az alkalmazások közvetlen indításának nem kell bevonnia a Windows rendszerhéjat, és a kapcsolódó teljesítményköltségeket kell magában foglalnia. Az alapértelmezett eset gyorsabbá tétele érdekében a .NET Core az alapértelmezett értéket a következőre false
módosítjaProcessStartInfo.UseShellExecute: . Ha szüksége van rá, a lassabb útvonalat is választhatja.
Bevezetett verzió
2.1
Feljegyzés
A .NET Core UseShellExecute
korábbi verzióiban nem lett implementálva a Windows.
Javasolt művelet
Ha az alkalmazás a régi viselkedésre támaszkodik, hívja Process.Start(ProcessStartInfo)UseShellExecute meg az ProcessStartInfo objektumottrue
.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
.NET Core 1.0
A FileSystemInfo.Attributes által elvetett UnauthorizedAccessException
A .NET Core-ban a rendszer akkor aktiválódik UnauthorizedAccessException , amikor a hívó megpróbál beállítani egy fájlattribútum-értéket, de nem rendelkezik írási engedéllyel.
Módosítás leírása
A .NET-keretrendszer a hívó megpróbálja beállítani a fájlattribútum-értéketFileSystemInfo.Attributes, ArgumentException de nem rendelkezik írási engedéllyel. A .NET Core-ban ehelyett egy UnauthorizedAccessException lesz a dobás. (A .NET Core-ban a rendszer akkor is eldob egy ArgumentException hibát, ha a hívó érvénytelen fájlattribútumot próbál beállítani.)
Bevezetett verzió
1,0
Javasolt művelet
Módosítsa az utasításokat catch
úgy, hogy szükség esetén egy helyett vagy azon kívül is elfogjanak UnauthorizedAccessException egy utasítást ArgumentException.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
A sérült állapot kivételek kezelése nem támogatott
A sérült folyamatállapot-kivételek kezelése a .NET Core-ban nem támogatott.
Módosítás leírása
Korábban a sérült folyamatállapot-kivételeket a felügyelt kódkivétel-kezelők is elkaphatták és kezelhetik, például egy C#-ban található try-catch utasítással.
A .NET Core 1.0-tól kezdődően a sérült folyamatállapot-kivételek nem kezelhetők felügyelt kóddal. A közös nyelvi futtatókörnyezet nem biztosít sérült folyamatállapot-kivételeket a felügyelt kódhoz.
Bevezetett verzió
1,0
Javasolt művelet
Ne kelljen kezelni a sérült folyamatállapot-kivételeket az őket eredményező helyzetek kezelésével. Ha feltétlenül szükséges a sérült folyamatállapot-kivételek kezelése, írja be a kivételkezelőt C vagy C++ kódba.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
- System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute
- legacyCorruptedStateExceptionsPolicy elem
Az UriBuilder tulajdonságai már nem vannak előre felfűzve a bevezető karakterekre
UriBuilder.Fragment már nem fűzi elő a bevezető #
karaktert, és UriBuilder.Query már nem fűzi elő a bevezető ?
karaktert, ha már van ilyen.
Módosítás leírása
A .NET-keretrendszer és a UriBuilder.FragmentUriBuilder.Query tulajdonságok mindig előre fel vannak függve egy #
vagy ?
több karakterre a tárolt értékre. Ez a viselkedés több #
vagy ?
karaktert eredményezhet a tárolt értékben, ha a sztring már tartalmaz ilyen kezdő karaktereket. Előfordulhat például, hogy az érték a UriBuilder.Fragment következő lesz ##main
: .
A .NET Core 1.0-tól kezdődően ezek a #
tulajdonságok már nem használják a tárolt értékre a karaktereket vagy ?
karaktereket, ha a sztring elején már van ilyen.
Bevezetett verzió
1,0
Javasolt művelet
A tulajdonságértékek beállításakor már nem kell explicit módon eltávolítania ezeket a bevezető karaktereket. Ez különösen akkor hasznos, ha értékeket fűz hozzá, mert többé nem kell eltávolítania a bevezetőt #
vagy ?
minden egyes hozzáfűzést.
Az alábbi kódrészlet például a .NET-keretrendszer és a .NET Core közötti viselkedésbeli különbséget mutatja.
var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";
Console.WriteLine(builder.Query);
- A .NET-keretrendszer a kimenet a
????one=1&two=2&three=3&four=4
következő: . - A .NET Core-ban a kimenet a következő
?one=1&two=2&three=3&four=4
: .
Kategória
Alapvető .NET-kódtárak
Érintett API-k
A Process.StartInfo érvénytelenOperationException parancsot ad a nem indult folyamatokhoz
Azoknak a folyamatoknak a Process.StartInfo tulajdonságát olvasva, amelyeket a kód nem kezdett el dobni InvalidOperationException.
Módosítás leírása
A .NET-keretrendszer a kód által nem indult folyamatok tulajdonságának elérése Process.StartInfo egy hamis ProcessStartInfo objektumot ad vissza. A próbabábu objektum az összes tulajdonságának alapértelmezett értékeit tartalmazza, kivéve EnvironmentVariablesa .
A .NET Core 1.0-tól kezdődően, ha egy olyan folyamat tulajdonságát olvassa el Process.StartInfo , amely nem indult el (vagyis hívással Process.Start), a rendszer egy InvalidOperationException hibát jelez.
Bevezetett verzió
1,0
Javasolt művelet
Ne érje el a tulajdonságot azokhoz a Process.StartInfo folyamatokhoz, amelyeket a kód nem kezdett el. Például ne olvassa el ezt a tulajdonságot a visszaadott Process.GetProcessesfolyamatok esetében.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
Kriptográfia
.NET Core 2.1
A SignedCms.ComputeSignature logikai paramétere tiszteletben van tartva
A .NET Core-ban a metódus logikai silent
paramétere SignedCms.ComputeSignature(CmsSigner, Boolean) tiszteletben van tartva. A PIN-kód kérése nem jelenik meg, ha ez a paraméter be van állítva true
.
Módosítás leírása
A .NET-keretrendszer a rendszer figyelmen kívül hagyja a silent
SignedCms.ComputeSignature(CmsSigner, Boolean) metódus paraméterét, és mindig megjelenik egy PIN-kód kérése, ha a szolgáltató megköveteli. A .NET Core-ban a silent
paraméter tiszteletben van tartva, és ha be van állítva true
, a PIN-kód kérése soha nem jelenik meg, még akkor sem, ha azt a szolgáltató megköveteli.
A CMS/PKCS #7 üzenetek támogatása a 2.1-es verzióban jelent meg a .NET Core-ban.
Bevezetett verzió
2.1
Javasolt művelet
Ha meg szeretné győződni arról, hogy szükség esetén pin-kód kérése jelenik meg, az asztali alkalmazásoknak meg kell hívniuk SignedCms.ComputeSignature(CmsSigner, Boolean) a logikai paramétert false
. Az eredményként kapott viselkedés ugyanaz, mint a .NET-keretrendszer, függetlenül attól, hogy a csendes környezet le van-e tiltva.
Kategória
Kriptográfia
Érintett API-k
Msbuild
.NET Core 3.0
Erőforrás-jegyzékfájl nevének módosítása
A .NET Core 3.0-tól kezdve az alapértelmezett esetben az MSBuild egy másik jegyzékfájlnevet hoz létre az erőforrásfájlokhoz.
Bevezetett verzió
3,0
Módosítás leírása
A .NET Core 3.0 előtt, ha nem LogicalName
, ManifestResourceName
vagy DependentUpon
metaadatokat adott meg a projektfájl egyik EmbeddedResource
eleméhez, az MSBuild létrehozott egy jegyzékfájlnevet a mintában <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Ha RootNamespace
nincs definiálva a projektfájlban, akkor alapértelmezés szerint a projekt neve lesz. Például egy Űrlap1.resx nevű erőforrásfájl létrehozott jegyzékneve a gyökérprojekt könyvtárában a MyProject.Form1.resources volt.
A .NET Core 3.0-tól kezdődően, ha egy erőforrásfájl azonos nevű forrásfájllal van együtt helyezve (például Form1.resx és Form1.cs), az MSBuild a forrásfájl típusadatait használja a jegyzékfájl nevének a mintában <Namespace>.<ClassName>.resources
való létrehozásához. A rendszer kinyeri a névteret és az osztálynevet a megosztott forrásfájl első típusából. Például egy Form1.resx nevű erőforrásfájl létrehozott jegyzékneve, amely egy Form1.cs nevű forrásfájllal van együtt helyezve, a MyNamespace.Form1.resources. Fontos megjegyezni, hogy a fájlnév első része eltér a .NET Core korábbi verzióitól (MyProject helyett MyNamespace).
Feljegyzés
Ha a projektfájl egyik EmbeddedResource
elemén meg van LogicalName
adva , ManifestResourceName
vagy DependentUpon
metaadatok vannak megadva, akkor ez a módosítás nem érinti ezt az erőforrásfájlt.
Ez a kompatibilitástörő változás a tulajdonság .NET Core-projektekhez való EmbeddedResourceUseDependentUponConvention
hozzáadásával lett bevezetve. Alapértelmezés szerint az erőforrásfájlok nincsenek explicit módon felsorolva egy .NET Core-projektfájlban, így nem DependentUpon
rendelkeznek metaadatokkal a létrehozott .resources fájl elnevezéséhez. Ha EmbeddedResourceUseDependentUponConvention
az alapértelmezett értékre true
van állítva, az MSBuild egy megosztott forrásfájlt keres, és kinyer egy névteret és egy osztálynevet a fájlból. Ha be false
van állítvaEmbeddedResourceUseDependentUponConvention
, az MSBuild az előző viselkedésnek megfelelően hozza létre a jegyzéknevet, amely egyesíti RootNamespace
és a relatív fájl elérési útját.
Javasolt művelet
A legtöbb esetben nincs szükség műveletre a fejlesztő részéről, és az alkalmazásnak továbbra is működnie kell. Ha azonban ez a módosítás megszakítja az alkalmazást, a következőkre van lehetőség:
Módosítsa a kódot az új jegyzéknévre való várakozáshoz.
A projektfájlban való beállítással
EmbeddedResourceUseDependentUponConvention
false
tiltsa le az új elnevezési konvenciót.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategória
Msbuild
Érintett API-k
n/a
Hálózatkezelés
.NET Core 2.0
A WebClient.CancelAsync nem mindig mondja le azonnal
A .NET Core 2.0-tól kezdődően a hívás WebClient.CancelAsync() nem szakítja meg azonnal a kérést, ha a válasz beolvasása elkezdődött.
Módosítás leírása
Korábban a hívás WebClient.CancelAsync() azonnal megszakította a kérést. A .NET Core 2.0-tól kezdve a hívás WebClient.CancelAsync() csak akkor mondja le azonnal a kérést, ha a válasz nem indult el. Ha a válasz beolvasása elkezdődött, a kérés csak a teljes válasz elolvasása után lesz megszakítva.
Ez a módosítás azért lett implementálva, mert az WebClient API elavult a javára HttpClient.
Bevezetett verzió
2,0
Javasolt művelet
System.Net.Http.HttpClient Az elavult osztály helyett System.Net.WebClienthasználja az osztályt.
Kategória
Hálózatkezelés
Érintett API-k
Windows Forms
A Windows Forms támogatása a 3.0-s verzióban lett hozzáadva a .NET Core-hoz. Ha Windows Forms-alkalmazást migrál .NET-keretrendszer-ról .NET Core-ra, az itt felsorolt kompatibilitástörő változások hatással lehetnek az alkalmazásra.
- Eltávolított vezérlők
- A CellFormatting esemény nem jelenik meg, ha megjelenik az elemleírás
- A Control.DefaultFont Segoe UI 9 pt-ra módosult
- A FolderBrowserDialog modernizálása
- A SerializableAttribute el lett távolítva bizonyos Windows-űrlaptípusokból
- Az AllowUpdateChildControlIndexForTabControls kompatibilitási kapcsoló nem támogatott
- A DomainUpDown.UseLegacyScrolling kompatibilitási kapcsoló nem támogatott
- A DoNotLoadLatestRichEditControl kompatibilitási kapcsolója nem támogatott
- DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitási kapcsoló nem támogatott
- A DontSupportReentrantFilterMessage kompatibilitási kapcsoló nem támogatott
- Az EnableVisualStyleValidation kompatibilitási kapcsoló nem támogatott
- A UseLegacyContextMenuStripSourceControlValue kompatibilitási kapcsoló nem támogatott
- A UseLegacyImages kompatibilitási kapcsoló nem támogatott
- A Visual Basic névjegy- és SplashScreen-sablonjai hibásak
- A Microsoft.VisualBasic.ApplicationServices névtér típusai nem érhetők el
- A Microsoft.VisualBasic.Devices névtér típusai nem érhetők el
- A Microsoft.VisualBasic.MyServices névtér típusai nem érhetők el
.NET Core 3.1
Eltávolított vezérlők
A .NET Core 3.1-től kezdve bizonyos Windows Forms-vezérlők már nem érhetők el.
Módosítás leírása
A .NET Core 3.1-től kezdve a Windows Forms különböző vezérlői már nem érhetők el. A jobb kialakítású és támogatott cserevezérlőket a 2.0-s .NET-keretrendszer vezették be. Az elavult vezérlőket korábban eltávolították a tervezőeszközkészletekből, de továbbra is használhatók voltak.
A következő típusok már nem érhetők el:
- 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
Bevezetett verzió
3.1
Javasolt művelet
Minden eltávolított vezérlő ajánlott cserevezérlővel rendelkezik. Tekintse meg a következő táblázatot:
Eltávolított vezérlő (API) | Javasolt csere | Eltávolított társított API-k |
---|---|---|
Contextmenu | ContextMenuStrip | |
Datagrid | Datagridview | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
MainMenu | MenuStrip | |
Menü | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
Menuitem | ToolStripMenuItem | |
Eszköztár | Eszközsávon | ToolBarAppearance |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategória
Windows Forms
Érintett API-k
- 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
A CellFormatting esemény nem jelenik meg, ha megjelenik az elemleírás
Ekkor DataGridView megjelenik egy cella szövegének és hibaelemeinek elemleírása, ha az egérrel rámutat, és a billentyűzeten keresztül van kiválasztva. Ha elemleírás jelenik meg, az DataGridView.CellFormatting esemény nem jelenik meg.
Módosítás leírása
A .NET Core 3.1-et megelőzően egy DataGridView olyan tulajdonság volt ShowCellToolTips beállítva true
, amely elemleírást mutatott egy cella szövegéhez, és hibákat észlelt, amikor a cellát egérrel mozgatta. Az elemleírások nem jelennek meg, amikor egy cella ki van jelölve a billentyűzeten keresztül (például a Tab billentyűvel, a billentyűparancsokkal vagy a nyílnavigációval). Ha a felhasználó szerkesztett egy cellát, majd miközben még DataGridView szerkesztési módban volt, egy olyan cellára mutatott, amely nem rendelkezik a ToolTipText tulajdonságkészlettel, egy eseményt emeltek ki, CellFormatting amely formázza a cella szövegét a cellában való megjelenítéshez.
A .NET Core 3.1-től kezdődően az akadálymentességi szabványoknak való megfelelés érdekében a DataGridView tulajdonság úgy van ShowCellToolTips beállítva true
, hogy elemleírásokat jelenítsen meg egy cella szövegéhez és hibáihoz nem csak a cella rámutatásakor, hanem a billentyűzeten keresztüli kijelöléskor is. A változás következtében az esemény nem jön létre, ha a CellFormatting tulajdonsághalmazt nem ToolTipText tartalmazó cellák a DataGridView szerkesztési módban vannak. Az esemény nem merül fel, mert a rámutatott cella tartalma elemleírásként jelenik meg a cellában való megjelenítés helyett.
Bevezetett verzió
3.1
Javasolt művelet
Az eseménytől DataGridView függő CellFormatting kód újrabontása szerkesztési módban.
Kategória
Windows Forms
Érintett API-k
Egyik sem
.NET Core 3.0
Alapértelmezett vezérlőelem betűtípusa Segoe UI 9 pt-ra módosult
Módosítás leírása
A .NET-keretrendszer a Control.DefaultFont tulajdonság értéke Microsoft Sans Serif 8 pt
. Az alábbi képen az alapértelmezett betűtípust használó ablak látható.
A .NET Core 3.0-tól kezdve az alapértelmezett betűtípus Segoe UI 9 pt
értéke (ugyanaz, mint SystemFonts.MessageBoxFonta ). A változás eredményeként az űrlapok és vezérlők mérete körülbelül 27%-kal nagyobb, hogy figyelembe vegyék az új alapértelmezett betűtípus nagyobb méretét. Példa:
Ez a módosítás a Windows felhasználói felületére (UX) vonatkozó irányelveknek megfelelően történt.
Bevezetett verzió
3,0
Javasolt művelet
Az űrlapok és vezérlők méretének változása miatt győződjön meg arról, hogy az alkalmazás megfelelően jelenik meg.
Az eredeti betűtípus megőrzéséhez állítsa be az űrlap alapértelmezett betűtípusát a következőre Microsoft Sans Serif 8 pt
: . Példa:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8f);
}
Kategória
- Windows Forms
Érintett API-k
Nincs.
A FolderBrowserDialog modernizálása
A FolderBrowserDialog vezérlő megváltozott a .NET Core-hoz készült Windows Forms-alkalmazásokban.
Módosítás leírása
A .NET-keretrendszer a Windows-űrlapok az alábbi párbeszédpanelt használják a FolderBrowserDialog vezérlőhöz:
A .NET Core 3.0-ban a Windows Forms egy újabb COM-alapú vezérlőt használ, amely a Windows Vista rendszerben lett bevezetve:
Bevezetett verzió
3,0
Javasolt művelet
A párbeszédpanel automatikusan frissül.
Ha meg szeretné őrizni az eredeti párbeszédpanelt, állítsa be a FolderBrowserDialog.AutoUpgradeEnabled tulajdonságot false
a párbeszédpanel megjelenítése előtt, ahogyan azt az alábbi kódrészlet szemlélteti:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Kategória
Windows Forms
Érintett API-k
A SerializableAttribute el lett távolítva bizonyos Windows-űrlaptípusokból
A SerializableAttribute rendszer eltávolította azokat a Windows Forms-osztályokat, amelyek nem rendelkeznek ismert bináris szerializálási forgatókönyvekkel.
Módosítás leírása
A következő típusokat az SerializableAttribute in .NET-keretrendszer díszíti, de az attribútum el lett távolítva a .NET Core-ban:
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
A szerializálási mechanizmusnak korábban komoly karbantartási és biztonsági problémái voltak. A típusok megtartása SerializableAttribute
azt jelenti, hogy ezeket a típusokat tesztelni kell a verzióról verzióra szerializálási változások és a keretrendszer-keretrendszer szerializálásának esetleges változásai esetében. Ez megnehezíti ezeket a típusokat, és költséges lehet fenntartani. Ezek a típusok nem rendelkeznek ismert bináris szerializálási forgatókönyvekkel, ami minimálisra csökkenti az attribútum eltávolításának hatását.
További információ: Bináris szerializálás.
Bevezetett verzió
3,0
Javasolt művelet
Frissítse azokat a kódot, amelyek attól függhetnek, hogy ezek a típusok szerializálhatóként vannak megjelölve.
Kategória
Windows Forms
Érintett API-k
- Egyik sem
Az AllowUpdateChildControlIndexForTabControls kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
kompatibilitási kapcsoló a Windows Forms .NET-keretrendszer 4.6-os és újabb verzióiban támogatott, de a .NET Core vagy a .NET 5.0 és újabb verziókban nem támogatott.
Módosítás leírása
A .NET-keretrendszer 4.6-os és újabb verzióiban a fül kiválasztása átrendezi a vezérlőgyűjteményt. A Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
kompatibilitási kapcsoló lehetővé teszi, hogy az alkalmazás kihagyja ezt az átrendezést, ha ez a viselkedés nem kívánatos.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
- Egyik sem
A DomainUpDown.UseLegacyScrolling kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
.NET-keretrendszer 4.7.1-ben bevezetett kompatibilitási kapcsoló a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban nem támogatott.
Módosítás leírása
A .NET-keretrendszer 4.7.1-től kezdve a kompatibilitási kapcsoló lehetővé tette a Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
fejlesztők számára a független DomainUpDown.DownButton() és DomainUpDown.UpButton() a műveletek letiltását. A kapcsoló visszaállította az örökölt viselkedést, amelyben a rendszer figyelmen kívül hagyja a DomainUpDown.UpButton() környezetszöveget, és a fejlesztőnek a művelet előtt műveletet kell használnia DomainUpDown.DownButton() a DomainUpDown.UpButton() vezérlőn. További információ: <AppContextSwitchOverrides> elem.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
A DoNotLoadLatestRichEditControl kompatibilitási kapcsolója nem támogatott
A Switch.System.Windows.Forms.UseLegacyImages
.NET-keretrendszer 4.7.1-ben bevezetett kompatibilitási kapcsoló a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban nem támogatott.
Módosítás leírása
A .NET-keretrendszer 4.6.2-ben és az előző verziókban a RichTextBox vezérlő példányosítja a Win32 RichEdit vezérlő 3.0-s verzióját, és a 4.7.1-.NET-keretrendszer megcélzott alkalmazások esetében a RichTextBox vezérlő példányosítja a RichEdit 4.1-et (msftedit.dll). A Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
kompatibilitási kapcsolót azért vezettük be, hogy az .NET-keretrendszer 4.7.1-.NET-keretrendszer és újabb verziójú alkalmazások kikapcsolják az új RichEdit v4.1 vezérlőt, és helyette a régi RichEdit v3 vezérlőt használják.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl
kapcsoló nem támogatott. Csak a RichTextBox vezérlő új verziói támogatottak.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
.NET-keretrendszer 4.6.1-ben bevezetett kompatibilitási kapcsoló a .NET Core-on és a .NET 5.0-s és újabb verzióin futó Windows Formsban nem támogatott.
Módosítás leírása
A .NET-keretrendszer 4.6.1-től kezdve a Ctrl + A billentyűparancsot választva egy TextBox vezérlőelemben kijelölheti az összes szöveget. A .NET-keretrendszer 4.6-os és korábbi verzióiban a Ctrl + A billentyűparanccsal nem sikerült kijelölni az összes szöveget, ha a Textbox.ShortcutsEnabled és TextBox.Multiline a tulajdonságok értéke is be van állítva.true
A Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
kompatibilitási kapcsolót a .NET-keretrendszer 4.6.1-ben vezettük be az eredeti működés megőrzése érdekében. További információ eléréséhez lásd: TextBox.ProcessCmdKey.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
- Egyik sem
A DontSupportReentrantFilterMessage kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
.NET-keretrendszer 4.6.1-ben bevezetett kompatibilitási kapcsoló a .NET Core-on és a .NET 5.0-s és újabb verzióin futó Windows Formsban nem támogatott.
Módosítás leírása
A .NET-keretrendszer 4.6.1-től kezdve a kompatibilitási kapcsoló a Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
lehetséges IndexOutOfRangeException kivételeket kezeli, ha az Application.FilterMessage üzenetet egyéni IMessageFilter.PreFilterMessage implementációval hívják meg. További információ : Megoldás: Custom IMessageFilter.PreFilterMessage implementációk.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.DontSupportReentrantFilterMessage
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
Az EnableVisualStyleValidation kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.EnableVisualStyleValidation
kompatibilitási kapcsoló nem támogatott a Windows Formsban a .NET Core-on vagy a .NET 5.0-s és újabb verzióiban.
Módosítás leírása
A .NET-keretrendszer a Switch.System.Windows.Forms.EnableVisualStyleValidation
kompatibilitási kapcsoló lehetővé tette, hogy az alkalmazás letiltsa a numerikus formában megadott vizuális stílusok érvényesítését.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.EnableVisualStyleValidation
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
- Egyik sem
A UseLegacyContextMenuStripSourceControlValue kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
.NET-keretrendszer 4.7.2-ben bevezetett kompatibilitási kapcsoló nem támogatott a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Módosítás leírása
A .NET-keretrendszer 4.7.2-től kezdve a Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kompatibilitási kapcsoló lehetővé teszi, hogy a fejlesztő kikapcsolja a ContextMenuStrip.SourceControl tulajdonság új viselkedését, amely mostantól a forrásvezérlőre mutató hivatkozást ad vissza. A tulajdonság előző viselkedése a visszatérés null
volt. További információ: <AppContextSwitchOverrides> elem.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
A UseLegacyImages kompatibilitási kapcsoló nem támogatott
A Switch.System.Windows.Forms.UseLegacyImages
.NET-keretrendszer 4.8-ban bevezetett kompatibilitási kapcsoló nem támogatott a Windows Formsban .NET Core-on vagy .NET 5.0-s vagy újabb verzióiban.
Módosítás leírása
A .NET-keretrendszer 4.8-tól kezdve a kompatibilitási kapcsoló elhárított Switch.System.Windows.Forms.UseLegacyImages
egy lehetséges képméretezési problémát a ClickOnce-forgatókönyvekben a magas DPI-környezetekben. Ha be van true
állítva, a kapcsoló lehetővé teszi, hogy a felhasználó visszaállítsa az örökölt képskálázást a magas DPI-kijelzőkön, amelyek skálázása 100%-nál nagyobbra van állítva. További információ: .NET-keretrendszer 4.8 Kibocsátási megjegyzések a GitHubon.
A .NET Core és a .NET 5.0 és újabb verziókban a Switch.System.Windows.Forms.UseLegacyImages
kapcsoló nem támogatott.
Bevezetett verzió
3,0
Javasolt művelet
Távolítsa el a kapcsolót. A kapcsoló nem támogatott, és nem érhető el alternatív funkció.
Kategória
Windows Forms
Érintett API-k
- Egyik sem
A Névjegy és a SplashScreen-sablonok hibásak
A About.vb
Visual Studio által létrehozott és SplashScreen.vb
létrehozott fájlok a névtér olyan My
típusaira mutató hivatkozásokat tartalmaznak, amelyek nem érhetők el .NET Core 3.0 és 3.1.
Bevezetett verzió
3,0
Módosítás leírása
A .NET Core 3.0 és 3.1 nem tartalmaz teljes Visual Basic-támogatást My
. A Visual Studio For Visual Basic Windows Forms-alkalmazások Névjegy és SplashScreen űrlapsablonjai olyan típusú tulajdonságokra My.Application.Info
hivatkoznak, amelyek nem érhetők el.
Javasolt művelet
A Visual Basic My
támogatása javult a .NET 5-ben, és a projektet .NET 5-ös vagy újabb verzióra frissítette.
-vagy-
Javítsa ki az alkalmazás Névjegy és SplashScreen típusok fordítóhibáit. System.Reflection.Assembly
Az osztály használatával lekérheti a típus által My.Application.Info
megadott információkat. Itt mindkét űrlap egyenes portja érhető el.
Tipp.
Ez egy mintakód, és nem optimális. Az attribútumok listáját gyorsítótárazza az űrlap betöltési idejének csökkentése érdekében.
Névjegy
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
Kategória
Visual Basic Windows Forms
Érintett API-k
Egyik sem
A Microsoft.VisualBasic.ApplicationServices névtér típusai nem érhetők el
A névtérben Microsoft.VisualBasic.ApplicationServices lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Módosítás leírása
A névtérben lévő típusok elérhetők voltak a Microsoft.VisualBasic.ApplicationServices .NET-keretrendszer. Nem érhetők el a .NET Core 3.0- 3.1-ben.
A típusok el lettek távolítva, hogy elkerülhetők legyenek a szükségtelen szerelvényfüggőségek vagy a későbbi kiadásokban bekövetkező kompatibilitástörő változások.
Javasolt művelet
Ez a névtér a .NET 5-ben lett hozzáadva, és frissítse a projektet .NET 5 vagy újabb verzióra.
-vagy-
Ha a kód a típusok és a tagok használatától Microsoft.VisualBasic.ApplicationServices függ, akkor a .NET-osztálytárban használhat egy megfelelő típust vagy tagot. Néhány tag System.Security.Principal.WindowsIdentity például System.Environment az osztály tulajdonságainak Microsoft.VisualBasic.ApplicationServices.User megfelelő funkciókat biztosít.
Kategória
Visual Basic
Érintett API-k
A Microsoft.VisualBasic.Devices névtér típusai nem érhetők el
A névtérben Microsoft.VisualBasic.Devices lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Módosítás leírása
A névtérben lévő típusok elérhetők voltak a Microsoft.VisualBasic.Devices .NET-keretrendszer. Nem érhetők el a .NET Core 3.0- 3.1-ben.
A típusok el lettek távolítva, hogy elkerülhetők legyenek a szükségtelen szerelvényfüggőségek vagy a későbbi kiadásokban bekövetkező kompatibilitástörő változások.
Javasolt művelet
Ez a névtér a .NET 5-ben lett hozzáadva, és frissítse a projektet .NET 5 vagy újabb verzióra.
-vagy-
Ha a kód a típusok és a tagok használatától Microsoft.VisualBasic.Devices függ, akkor a .NET-osztálytárban használhat egy megfelelő típust vagy tagot. Például az Microsoft.VisualBasic.Devices.Clock osztálynak megfelelő funkciókat az és System.Environment a System.DateTime típusok biztosítják, az Microsoft.VisualBasic.Devices.Ports osztálynak megfelelő funkciókat pedig a System.IO.Ports névtér típusok biztosítják.
Kategória
Visual Basic
Érintett API-k
A Microsoft.VisualBasic.MyServices névtér típusai nem érhetők el
A névtérben Microsoft.VisualBasic.MyServices lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Módosítás leírása
A névtérben lévő típusok elérhetők voltak a Microsoft.VisualBasic.MyServices .NET-keretrendszer. Nem érhetők el a .NET Core 3.0- 3.1-ben.
A típusok el lettek távolítva, hogy elkerülhetők legyenek a szükségtelen szerelvényfüggőségek vagy a későbbi kiadásokban bekövetkező kompatibilitástörő változások.
Javasolt művelet
Ez a névtér a .NET 5-ben lett hozzáadva, és frissítse a projektet .NET 5 vagy újabb verzióra.
-vagy-
Ha a kód a Microsoft.VisualBasic.MyServices típusok és azok tagjaitól függ, a .NET osztálytárban vannak megfelelő típusok és tagok. Az alábbiakban a Microsoft.VisualBasic.MyServices típusok megfeleltetése a megfelelő .NET-osztálykódtár-típusokhoz:
Microsoft.VisualBasic.MyServices típus | .NET-osztálykódtár típusa |
---|---|
ClipboardProxy | System.Windows.Clipboard WPF-alkalmazásokhoz, System.Windows.Forms.Clipboard Windows Forms-alkalmazásokhoz |
FileSystemProxy | Típusok a System.IO névtérben |
RegistryProxy | Beállításjegyzékhez kapcsolódó típusok a Microsoft.Win32 névtérben |
SpecialDirectoriesProxy | Environment.GetFolderPath |
Kategória
Visual Basic
Érintett API-k
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: