Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısıtlanmış yürütme bölgeleri (CER) özelliği yalnızca .NET Framework'te desteklenir. Bu nedenle, CER ile ilgili çeşitli API'ler .NET 5'te başlayarak eski olarak işaretlenir. Bu API'lerin kullanılması derleme zamanında uyarı SYSLIB0004 oluşturur.
CER ile ilgili aşağıdaki API'ler eskidir:
- 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
Ancak, aşağıdaki CER ile ilgili API'ler eski değildir :
- RuntimeHelpers.PrepareDelegate(Delegate)
- RuntimeHelpers.PrepareMethod
- System.Runtime.ConstrainedExecution.CriticalFinalizerObject
Geçici Çözümler
Bir yönteme CER özniteliği uyguladıysanız özniteliğini kaldırın. Bu özniteliklerin .NET 5 ve sonraki sürümlerinde hiçbir etkisi yoktur.
// REMOVE the attribute below. [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] public void DoSomething() { } // REMOVE the attribute below. [PrePrepareMethod] public void DoSomething() { }veya
RuntimeHelpers.PrepareContractedDelegatearıyorsanızRuntimeHelpers.ProbeForSufficientStack, aramayı kaldırın. Bu çağrıların .NET 5 ve sonraki sürümlerde hiçbir etkisi yoktur.public void DoSomething() { // REMOVE the call below. RuntimeHelpers.ProbeForSufficientStack(); // (Remainder of your method logic here.) }çağrısı
RuntimeHelpers.PrepareConstrainedRegionsyapıyorsanız, aramayı kaldırın. Bu çağrının .NET 5 ve sonraki sürümlerde hiçbir etkisi yoktur.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 } }çağrısı
RuntimeHelpers.ExecuteCodeWithGuaranteedCleanupyapıyorsanız, çağrıyı standarttry/catch/finallybir blokla değiştirin.// 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 } }
Uyarıyı gizleme
Eski API'leri kullanmanız gerekiyorsa, uyarıyı kodda veya proje dosyanızda gizleyebilirsiniz.
Yalnızca tek bir ihlali engellemek için, önişlemci yönergelerini kaynak dosyanıza ekleyerek uyarıyı devre dışı bırakın ve sonra yeniden etkinleştirin.
// Disable the warning.
#pragma warning disable SYSLIB0004
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0004
Projenizdeki tüm SYSLIB0004 uyarıları engellemek için proje dosyanıza bir <NoWarn> özellik ekleyin.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0004</NoWarn>
</PropertyGroup>
</Project>
Daha fazla bilgi için bkz . Uyarıları gizleme.