Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha egy alkalmazást .NET-keretrendszerbő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.
Jegyzet
Ez a cikk nem teljes listát tartalmaz a .NET-keretrendszer és a .NET Core közötti kompatibilitástörő változásokról. A legfontosabb jelentős változásokat itt adjuk hozzá, amint tudomást szerzünk róluk.
Alapvető .NET-kódtárak
- UseShellExecute alapértelmezett értékének módosítása
- IDispatchImplAttribute API el lesz távolítva
- UnauthorizedAccessException kivétel a FileSystemInfo.Attributes által
- Sérült folyamatállapot-kivételek kezelése nem támogatott
- UriBuilder-tulajdonságok már nem fűzik elő a kezdő karaktereket
- Process.StartInfo InvalidOperationException kivételt dob olyan folyamatokhoz, amelyeket nem te indítottál el
.NET 8
IDispatchImplAttribute API el lesz 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-on. A .NET-keretrendszer alapértelmezett értéke true.
Leírás módosítása
Process.Start lehetővé teszi, hogy közvetlenül elindítsa az alkalmazást, például olyan kóddal, mint a Paintet megnyitó Process.Start("mspaint.exe"). Azt is lehetővé teszi, hogy közvetetten elindítson egy társított alkalmazást, ha ProcessStartInfo.UseShellExecutetrueértékre van állítva. A .NET-keretrendszerben a ProcessStartInfo.UseShellExecute alapértelmezett értéke true, ami azt jelenti, hogy a Process.Start("mytextfile.txt")-hez hasonló kód elindítja a Jegyzettömbet, ha .txt fájlokat társított a szerkesztőhöz. Ha meg szeretné akadályozni, hogy egy alkalmazás közvetetten elinduljon a .NET-keretrendszerben, explicit módon be kell állítania ProcessStartInfo.UseShellExecutefalse. A .NET Core-on a ProcessStartInfo.UseShellExecute alapértelmezett értéke false. Ez azt jelenti, hogy alapértelmezés szerint a társított alkalmazások nem indulnak el Process.Starthívásakor.
A System.Diagnostics.ProcessStartInfo alábbi tulajdonságai csak akkor működnek, ha ProcessStartInfo.UseShellExecutetrue:
- 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. A Process.Start általában egy alkalmazás közvetlen indítására szolgál. Egy alkalmazás közvetlen indítása nem igényli a Windows rendszerhéj bevonását, ezáltal a kapcsolódó teljesítményköltségektől mentesülhet. Az alapértelmezett eset gyorsabbá tétele érdekében a .NET Core a ProcessStartInfo.UseShellExecute alapértelmezett értékét falseértékre módosítja. Ha szüksége van rá, a lassabb útvonalat is választhatja.
Bevezetett verzió
2.1
Jegyzet
A .NET Core korábbi verzióiban a UseShellExecute nem lett implementálva a Windowshoz.
Javasolt művelet
Ha az alkalmazás a régi viselkedésre támaszkodik, hívja meg az Process.Start(ProcessStartInfo) objektumon a UseShellExecute-t úgy, hogy a true értéke ProcessStartInfo legyen.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
.NET Core 1.0
A FileSystemInfo.Attributes által kiváltott UnauthorizedAccessException
A .NET Core-ban a rendszer UnauthorizedAccessException ad vissza, amikor a hívó megpróbál beállítani egy fájlattribútum-értéket, de nem rendelkezik írási engedéllyel.
Leírás módosítása
A .NET-keretrendszerben ArgumentException kerül sor, amikor a hívó megpróbál beállítani egy fájlattribútum-értéket FileSystemInfo.Attributes, de nincs írási engedélye. A .NET Core-ban ehelyett egy UnauthorizedAccessException dob. (A .NET Core-ban egy ArgumentException akkor is megjelenik, 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 catch utasításokat úgy, hogy szükség esetén UnauthorizedAccessExceptionhelyett vagy mellette egy ArgumentException-et kapjon el.
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.
Leírás módosítá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#-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 fűznek hozzá bevezető karaktereket
UriBuilder.Fragment már nem fűz elő egy vezető # karaktert, és UriBuilder.Query már nem fűzi elő a vezető ? karaktert, ha már van ilyen.
Leírás módosítása
A .NET-keretrendszerben a UriBuilder.Fragment és UriBuilder.Query tulajdonságok mindig előjeleznek egy # vagy ? karaktert 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 bevezető karaktereket. Előfordulhat például, hogy a UriBuilder.Fragment értéke ##mainlesz.
A .NET Core 1.0-tól kezdődően ezek a tulajdonságok már nem illesztik hozzá a # vagy ? karaktereket a tárolt értékhez, ha azok már megtalálhatók a karakterlánc elején.
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 hasznos értékek hozzáfűzésekor, mert így már minden egyes hozzáfűzésnél nem kell eltávolítania a kezdő # vagy ? karaktereket.
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-keretrendszerben a kimenet
????one=1&two=2&three=3&four=4. - A .NET Core-ban a kimenet
?one=1&two=2&three=3&four=4.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
A Process.StartInfo InvalidOperationException kivételt dob az olyan folyamatok esetén, amelyeket nem ön indított el.
Az Process.StartInfo tulajdonság olvasása olyan folyamatok esetében, amelyeket a kód nem kezdett el, InvalidOperationExceptionhibát okozhat.
Leírás módosítása
A .NET-keretrendszerben a kód által nem megkezdett folyamatok Process.StartInfo tulajdonságának elérése egy hamis ProcessStartInfo objektumot ad vissza. A próbabábu objektum a EnvironmentVariableskivételével az összes tulajdonságának alapértelmezett értékeit tartalmazza.
A .NET Core 1.0-tól kezdődően, ha egy nem megkezdett folyamat Process.StartInfo tulajdonságát olvassa be (vagyis a Process.Startmeghívásával), a rendszer InvalidOperationException dob.
Bevezetett verzió
1.0
Javasolt művelet
Ne férjen hozzá a Process.StartInfo tulajdonsághoz olyan folyamatok esetében, amelyeket a kódja nem indított el. Például ne olvassa el ezt a tulajdonságot a Process.GetProcessesáltal visszaadott folyamatok 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 silent metódus logikai SignedCms.ComputeSignature(CmsSigner, Boolean) paramétere tiszteletben van tartva. A PIN-kód megjelenítése elmarad, ha ez a paraméter trueértékre van beállítva.
Leírás módosítása
A .NET-keretrendszerben a rendszer figyelmen kívül hagyja a silent metódus SignedCms.ComputeSignature(CmsSigner, Boolean) paraméterét, és mindig megjelenik egy PIN-kód kérése, ha a szolgáltató megköveteli. A .NET Core-ban a rendszer tiszteletben tartja a silent paramétert, és ha trueértékre van állítva, akkor sem jelenik meg PIN-kód kérése, 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), és a logikai paramétert falsekell beállítaniuk. Az eredményként kapott viselkedés ugyanaz, mint a .NET-keretrendszerben, 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
Leírás módosítása
A .NET Core 3.0 előtt, ha nem volt megadva LogicalName, ManifestResourceNamevagy DependentUpon metaadat a projektfájl egyik EmbeddedResource eleméhez, az MSBuild létrehozott egy jegyzékfájlnevet a minta <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Ha RootNamespace nincs definiálva a projektfájlban, az alapértelmezés szerint a projekt neve lesz. A Form1.resx nevű erőforrásfájl létrehozott jegyzékneve például MyProject.Form1.resourcesvolt.
A .NET Core 3.0-tól kezdődően, ha egy erőforrásfájl azonos nevű forrásfájllal van együtt (például Form1.resx és Form1.cs), az MSBuild a forrásfájl típusadatait használja a jegyzékfájl nevének létrehozásához a minta <Namespace>.<ClassName>.resources. A rendszer kinyeri a névteret és az osztálynevet a megosztott forrásfájl első típusából. Például a Form1.resx nevű erőforrásfájlhoz, amely a Form1.cs nevű forrásfájl mellett található, létrehozott jegyzék neve MyNamespace.Form1.resources. A legfontosabb dolog, hogy a fájlnév első része eltér a .NET Core korábbi verzióitól (MyNamespace helyett MyProject).
Jegyzet
Ha LogicalName, ManifestResourceNamevagy DependentUpon metaadatok vannak megadva a projektfájl egy EmbeddedResource elemén, akkor ez a módosítás nem érinti ezt az erőforrásfájlt.
Ez a kompatibilitástörő változás a EmbeddedResourceUseDependentUponConvention tulajdonság .NET Core-projektekhez való hozzáadásával jelent meg. Alapértelmezés szerint az erőforrásfájlok nincsenek explicit módon felsorolva egy .NET Core-projektfájlban, így nem rendelkeznek DependentUpon metaadatokkal a létrehozott .resources fájl elnevezéséhez. Ha EmbeddedResourceUseDependentUponConventiontrueértékre van állítva , amely az alapértelmezett érték, az MSBuild egy megosztott forrásfájlt keres, és kinyeri a fájlból a névteret és az osztálynevet. Ha EmbeddedResourceUseDependentUponConventionfalseértékre állítja, az MSBuild az előző viselkedésnek megfelelően hozza létre a jegyzéknevet, amely egyesíti a 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.
Az új elnevezési konvenció kizárásához állítsa
EmbeddedResourceUseDependentUponConvention-rafalsea projektfájlban.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategória
MSBuild
Érintett API-k
Nincs adat.
Hálózatok
.NET Core 2.0
A WebClient.CancelAsync nem mindig mondja le azonnal
A .NET Core 2.0-tól kezdve a WebClient.CancelAsync() hívása nem szakítja meg azonnal a kérést, ha a válasz beolvasása elkezdődött.
Leírás módosítása
Korábban a WebClient.CancelAsync() hívása azonnal megszakította a kérést. A .NET Core 2.0-tól kezdve a WebClient.CancelAsync() hívása csak akkor mondja le a kérést azonnal, ha a válasz még 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 a WebClient API elavult a HttpClientjavára.
Bevezetett verzió
2.0
Javasolt művelet
Az elavult System.Net.Http.HttpClienthelyett használja a System.Net.WebClient osztályt.
Kategória
Hálózatok
É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 a .NET-keretrendszerből a .NET Core-ba, az itt felsorolt kompatibilitástörő változások hatással lehetnek az alkalmazásra.
- Eltávolított vezérlők
- CellFormatting esemény nem váltódik ki, ha az elemleírás mutatva van
- Control.DefaultFont megváltozott erre: Segoe UI 9 pontos
- FolderBrowserDialog modernizálása
- A SerializableAttribute eltávolították néhány Windows Forms-típusból
- Az AllowUpdateChildControlIndexForTabControls kompatibilitási kapcsoló nem támogatott
- DomainUpDown.UseLegacyScrolling kompatibilitási kapcsoló nem támogatott
- DoNotLoadLatestRichEditControl kompatibilitási kapcsoló nem támogatott
- DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitási kapcsoló nem támogatott
- DontSupportReentrantFilterMessage kompatibilitási kapcsoló nem támogatott
- EnableVisualStyleValidation kompatibilitási kapcsoló nem támogatott
- UseLegacyContextMenuStripSourceControlValue kompatibilitási kapcsoló nem támogatott
- 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.
Leírás módosítá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 .NET-keretrendszer 2.0-s verziója vezette 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
- 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
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 helyettesítés | Eltávolított társított API-k |
|---|---|---|
| kontextus menü | ContextMenuStrip | |
| DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTáblagyűjtemény, DataGridOszlopgyűjtemény, DataGridTáblastílus, DataGridOszlopstílus, DataGridVonalstílus, DataGridSzülőSorokCímke, DataGridSzülőSorokCímkestílus, DataGridBoolOszlop, DataGridSzövegdoboz, OszlopstílusokGyűjteménye, TáblastílusokGyűjteménye, HitTestTípus |
| Főmenü | Menüsáv | |
| Menü | ToolStripDropDown, ToolStripDropDownMenu | MenüpontGyűjtemény |
| Menüelem | ToolStripMenuItem | |
| Eszközsáv | ToolStrip | Eszköztár megjelenése |
| Eszköztársáv gomb | Eszköztársáv gomb | 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 indul el, ha megjelenik a súgóbuborék.
A DataGridView mostantól egy cella szövegét és hibaüzeneteit jeleníti meg, amikor az egérrel rámutat, vagy a billentyűzettel van kiválasztva. Ha egy tooltip (súgó) jelenik meg, a DataGridView.CellFormatting esemény nem aktiválódik.
Leírás módosítása
A .NET Core 3.1-et megelőzően egy DataGridView, amelynél a ShowCellToolTips tulajdonság true volt beállítva, elemleírást mutatott egy cella szövegéhez és hibáihoz, 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 amíg a DataGridView még szerkesztési módban volt, egy olyan cellára mutatott, amely nem rendelkezik a ToolTipText tulajdonságkészlettel, egy CellFormatting esemény történt, amely formázza a cella szövegét a cellában való megjelenítéshez.
Az akadálymentességi szabványoknak való megfelelés érdekében a .NET Core 3.1-től kezdődően egy DataGridView, amelynek ShowCellToolTips tulajdonsága true, a cella szövegének és hibáinak elemleírásait nem csak a cella rámutatásakor, hanem a billentyűzeten keresztüli kijelöléskor is megjeleníti. A változás következtében a CellFormatting esemény nem kerül aktiválásra, amikor a ToolTipText tulajdonsággal nem rendelkező cellákra rá van mozgatva az egér, miközben a program DataGridView szerkesztési módban van. 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
Refaktorálja a CellFormatting eseménytől függő bármely kódot, miközben a DataGridView szerkesztési módban van.
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
Leírás módosítása
A .NET-keretrendszerben a Control.DefaultFont tulajdonság Microsoft Sans Serif 8.25 ptlett beállítva. 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 (ugyanaz, mint SystemFonts.MessageBoxFont). A változás eredményeként az űrlapok és vezérlők mérete körülbelül 27% nagyobb, hogy figyelembe vegyék az új alapértelmezett betűtípus nagyobb méretét. Például:
Ez a módosítás Windows felhasználói felület (UX)irányelveivel összhangban 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.
Ha egyetlen űrlap eredeti betűtípusát szeretné megőrizni, állítsa az alapértelmezett betűtípust Microsoft Sans Serif 8.25 ptértékre. Például:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
A teljes alkalmazás alapértelmezett betűtípusát az alábbi módokon is módosíthatja:
Ha a
ApplicationDefaultFontMSBuild tulajdonságot "Microsoft Sans Serif, 8.25pt" értékre állítja. Ez az előnyben részesített technika, mivel lehetővé teszi a Visual Studio számára, hogy a tervező új beállításait használja.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>A Application.SetDefaultFont(Font)felhívásával.
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()); } }
Kategória
- Windows Forms
Érintett API-k
Egyik sem.
A FolderBrowserDialog modernizálása
A FolderBrowserDialog vezérlő megváltozott a .NET Core-hoz készült Windows Forms-alkalmazásokban.
Leírás módosítása
A .NET-keretrendszerben a Windows-űrlapok a következő párbeszédpanelt használják a FolderBrowserDialog vezérlőelemhez:
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 a FolderBrowserDialog.AutoUpgradeEnabled tulajdonságot false a párbeszédpanel megjelenítése előtt, ahogyan az a következő kódtöredékben látható:
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 el lett távolítva néhány olyan Windows Forms-osztályból, amelyek nem rendelkeznek ismert bináris szerializálási forgatókönyvekkel.
Leírás módosítása
Az alábbi típusokat a .NET-keretrendszer SerializableAttribute 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.ResXNullRefSystem.Resources.ResXDataNodeSystem.Resources.ResXFileRef- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCTSystem.Windows.Forms.NativeMethods.MSG
A szerializálási mechanizmusnak korábban komoly karbantartási és biztonsági problémái voltak. A SerializableAttribute típusokon való fenntartása azt jelenti, hogy ezeket a típusokat tesztelni kell a verzióról verzióra történő szerializálási változásokra és a keretrendszerek között végzett szerializálási változásokra. Ez megnehezíti ezeknek a típusoknak a fejlesztését, és költséges lehet a fenntartásuk. 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ót a Windows Forms támogatja a .NET-keretrendszer 4.6-os és újabb verzióiban, de a .NET Core vagy a .NET 5.0 és újabb verziókban nem támogatott.
Leírás módosítá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 .NET-keretrendszer 4.7.1-ben bevezetett Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibilitási kapcsoló nem támogatott a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítása
A .NET-keretrendszer 4.7.1-től kezdve a Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibilitási kapcsoló lehetővé tette, hogy a fejlesztők kikapcsolják a független DomainUpDown.DownButton() és DomainUpDown.UpButton() műveleteket. A kapcsoló visszaállította az örökölt viselkedést, amelyben a DomainUpDown.UpButton() figyelmen kívül hagyja, ha a környezet szövege jelen van, és a fejlesztőnek DomainUpDown.DownButton() műveletet kell használnia a vezérlőn a DomainUpDown.UpButton() művelet előtt. 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 .NET-keretrendszer 4.7.1-ben bevezetett Switch.System.Windows.Forms.UseLegacyImages kompatibilitási kapcsoló nem támogatott a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítá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 .NET-keretrendszer 4.7.1-et célzó alkalmazások esetében a RichTextBox vezérlő a RichEdit 4.1-et példányosítja (msftedit.dll). A Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl kompatibilitási kapcsolót azért vezettük be, hogy a .NET-keretrendszer 4.7.1-s és újabb verzióit célzó 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 .NET-keretrendszer 4.6.1-ben bevezetett Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitási kapcsoló nem támogatott a .NET Core-on és a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítása
A .NET-keretrendszer 4.6.1-től kezdve a Ctrl + A billentyűparancs egy TextBox vezérlőelemben az összes szöveget kijelöli. A .NET-keretrendszer 4.6-os és korábbi verzióiban a Ctrl + A billentyűparancs nem tudta kijelölni az összes szöveget, ha a Textbox.ShortcutsEnabled és TextBox.Multiline tulajdonság is truelett beállítva. 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ó: 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 .NET-keretrendszer 4.6.1-ben bevezetett Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitási kapcsoló nem támogatott a .NET Core-on és a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítása
A .NET-keretrendszer 4.6.1-től kezdve a Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitási kapcsoló a lehetséges IndexOutOfRangeException kivételeket kezeli, amikor a Application.FilterMessage üzenetet egyéni IMessageFilter.PreFilterMessage-implementációval hívják meg. További információkért lásd: Enyhítés: Egyéni 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 .NET Core-on vagy .NET 5.0-s és újabb verzióiban.
Leírás módosítása
A .NET-keretrendszerben 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 .NET-keretrendszer 4.7.2-ben bevezetett Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibilitási kapcsoló nem támogatott a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítá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 most a forrásvezérlőre mutató hivatkozást ad vissza. A tulajdonság előző viselkedése az volt, hogy nullad vissza. 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 .NET-keretrendszer 4.8-ban bevezetett Switch.System.Windows.Forms.UseLegacyImages kompatibilitási kapcsoló nem támogatott a .NET Core-on vagy a .NET 5.0-s és újabb verzióin futó Windows Formsban.
Leírás módosítása
A .NET-keretrendszer 4.8-tól kezdődően a Switch.System.Windows.Forms.UseLegacyImages kompatibilitási kapcsoló elhárított egy lehetséges képméretezési problémát a ClickOnce-forgatókönyvekben a magas DPI-környezetekben. Ha trueértékre van állítva, a kapcsoló lehetővé teszi, hogy a felhasználó visszaállítsa az örökölt képskálázást olyan magas DPI-kijelzőkön, amelyek mérete nagyobb, mint 100%. További információ: .NET Framework 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 Rólunk és a SplashScreen-sablonok hibásak
A Visual Studio által létrehozott About.vb és SplashScreen.vb fájlok olyan típusokra hivatkoznak a My névtérben, amelyek nem érhetők el .NET Core 3.0 és 3.1.
Bevezetett verzió
3.0
Leírás módosítása
A .NET Core 3.0 és 3.1 nem tartalmaz teljes Visual Basic My támogatást. A Visual Studio-ban a Visual Basic Windows Forms-alkalmazásokhoz használatos "Névjegy" és "SplashScreen" űrlapsablonok olyan My.Application.Info típusú tulajdonságokra hivatkoznak, amelyek nem érhetők el.
Javasolt művelet
A Visual Basic My támogatása a .NET 5-ben javult, a projekt frissítése .NET 5 vagy újabb verzióra.
-vagy-
Javítsa ki az alkalmazás About és SplashScreen típusainak fordítóhibáit. A System.Reflection.Assembly típus által megadott információk lekéréséhez használja a My.Application.Info osztályt. Itt elérhető mindkét verzió közvetlen portolása.
Borravaló
Ez egy mintakód, és nem optimális. Az attribútumok listáját a betöltési idő csökkentése érdekében gyorsítótárazni kell az űrlapnál.
A ismertetése
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 Microsoft.VisualBasic.ApplicationServices névtérben lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Leírás módosítása
A Microsoft.VisualBasic.ApplicationServices névtér típusok a .NET-keretrendszerben voltak elérhetők. 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 Microsoft.VisualBasic.ApplicationServices típustól és azok tagjaitól függ, akkor a .NET-osztálytárban használhat egy megfelelő típust vagy tagot. Egyes System.Environment és System.Security.Principal.WindowsIdentity tagok például a Microsoft.VisualBasic.ApplicationServices.User osztály tulajdonságaival egyenértékű funkciókat biztosítanak.
Kategória
Visual Basic
Érintett API-k
A Microsoft.VisualBasic.Devices névtér típusai nem érhetők el
A Microsoft.VisualBasic.Devices névtérben lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Leírás módosítása
A Microsoft.VisualBasic.Devices névtér típusok a .NET-keretrendszerben voltak elérhetők. 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 Microsoft.VisualBasic.Devices típustól és azok tagjaitól függ, akkor a .NET-osztálytárban használhat egy megfelelő típust vagy tagot. Az Microsoft.VisualBasic.Devices.Clock osztálysal egyenértékű funkciókat például a System.DateTime és a System.Environment típusok biztosítják, a Microsoft.VisualBasic.Devices.Ports osztálynak pedig a System.IO.Ports névtérben lévő típusok biztosítják az egyenértékű funkciókat.
Kategória
Visual Basic
Érintett API-k
A Microsoft.VisualBasic.MyServices névtér típusai nem érhetők el
A Microsoft.VisualBasic.MyServices névtérben lévő típusok nem érhetők el.
Bevezetett verzió
.NET Core 3.0
Leírás módosítása
A Microsoft.VisualBasic.MyServices névtér típusok a .NET-keretrendszerben voltak elérhetők. 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ípusától és tagjaitól függ, a .NET-osztálytárban megfelelő típusok és tagok találhatók. Az alábbiakban a Microsoft.VisualBasic.MyServices típusok leképezése a megfelelő .NET osztálykönyvtárak típusaira:
| 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