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

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

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

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

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

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

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=4kö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

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

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, ManifestResourceNamevagy 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>.resourcesvaló 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 LogicalNameadva , ManifestResourceNamevagy 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 truevan á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 falsevan á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.

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 EmbeddedResourceUseDependentUponConventionfalse 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

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.

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

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


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

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

Default control font in .NET Framework

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:

Default control font in .NET Core

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

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:

The FolderBrowserDialogControl in the .NET Framework

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:

The FolderBrowserDialogControl in the .NET Core

Bevezetett verzió

3,0

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:

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

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

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

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

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

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

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

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

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.

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.

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.

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.

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