A .NET-keretrendszerből a .NET Core-ba való migrálás kompatibilitástörő változásai

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

.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:

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.

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

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

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


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

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

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

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.

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 -ra false a 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

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.

.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:

Bevezetett verzió

3.1

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


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

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ó.

.NET-keretrendszer alapértelmezett vezérlőelem-betűtípusa

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:

alapértelmezett vezérlőelem betűtípusa a .NET Core

Ez a módosítás Windows felhasználói felület (UX)irányelveivel összhangban történt.

Bevezetett verzió

3.0

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 ApplicationDefaultFont MSBuild 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 FolderBrowserDialogControl a .NET keretrendszerben

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:

A FolderBrowserDialogControl a .NET Core

Bevezetett verzió

3.0

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:

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

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

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

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

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

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

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

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

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

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.

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.

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.

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.

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

Érintett API-k


Lásd még: