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.
A korlátozott végrehajtási régiók (CER) funkció csak .NET-keretrendszer támogatott. Ezért a különböző CER-hez kapcsolódó API-k elavultnak vannak megjelölve, kezdve a .NET 5-tel. Ezen API-k használata figyelmeztetést SYSLIB0004 generál fordításkor.
A következő CER-hez kapcsolódó API-k elavultak:
- RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(RuntimeHelpers+TryCode, RuntimeHelpers+CleanupCode, Object)
- RuntimeHelpers.PrepareConstrainedRegions()
- RuntimeHelpers.PrepareConstrainedRegionsNoOP()
- RuntimeHelpers.PrepareContractedDelegate(Delegate)
- RuntimeHelpers.ProbeForSufficientStack()
- System.Runtime.ConstrainedExecution.Cer
- System.Runtime.ConstrainedExecution.Consistency
- System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute
- System.Runtime.ConstrainedExecution.ReliabilityContractAttribute
A következő CER-hez kapcsolódó API-k azonban nem elavultak:
- RuntimeHelpers.PrepareDelegate(Delegate)
- RuntimeHelpers.PrepareMethod
- System.Runtime.ConstrainedExecution.CriticalFinalizerObject
Kerülő megoldások
Ha cerattribútumot alkalmazott egy metódusra, távolítsa el az attribútumot. Ezeknek az attribútumoknak nincs hatása a .NET 5-ös és újabb verzióiban.
// REMOVE the attribute below. [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public void DoSomething() { } // REMOVE the attribute below. [PrePrepareMethod] public void DoSomething() { }Ha hív
RuntimeHelpers.ProbeForSufficientStack, vagyRuntimeHelpers.PrepareContractedDelegatetávolítsa el a hívást. Ezek a hívások nem lépnek érvénybe a .NET 5-ös és újabb verzióiban.public void DoSomething() { // REMOVE the call below. RuntimeHelpers.ProbeForSufficientStack(); // (Remainder of your method logic here.) }Ha hív
RuntimeHelpers.PrepareConstrainedRegions, távolítsa el a hívást. A hívásnak nincs hatása a .NET 5-ös és újabb verzióiban.public void DoSomething_Old() { // REMOVE the call below. RuntimeHelpers.PrepareConstrainedRegions(); try { // try code } finally { // cleanup code } } public void DoSomething_Corrected() { // There is no call to PrepareConstrainedRegions. It's a normal try / finally block. try { // try code } finally { // cleanup code } }Ha hív
RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup, cserélje le a hívást egy szabványostry/catch/finallyblokkra.// The sample below produces warning SYSLIB0004. public void DoSomething_Old() { RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(MyTryCode, MyCleanupCode, null); } public void MyTryCode(object state) { /* try code */ } public void MyCleanupCode(object state, bool exceptionThrown) { /* cleanup code */ } // The corrected sample below does not produce warning SYSLIB0004. public void DoSomething_Corrected() { try { // try code } catch (Exception ex) { // exception handling code } finally { // cleanup code } }
Figyelmeztetés mellőzése
Ha az elavult API-kat kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.
// Disable the warning.
#pragma warning disable SYSLIB0004
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0004
Ha el szeretné tiltani a SYSLIB0004 projekt összes figyelmeztetését, adjon hozzá egy tulajdonságot <NoWarn> a projektfájlhoz.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0004</NoWarn>
</PropertyGroup>
</Project>
További információ: Figyelmeztetések mellőzése.