Sdílet prostřednictvím


SYSLIB0004: Funkce oblasti omezeného spuštění (CER) není podporována.

Funkce Omezené oblasti spouštění (CER) je podporována pouze v rozhraní .NET Framework. Proto jsou různá rozhraní API související s CER označená zastaralá počínaje rozhraním .NET 5. Použití těchto rozhraní API generuje upozornění SYSLIB0004 v době kompilace.

Zastaralá jsou následující rozhraní API související s CER:

Následující rozhraní API související s CER však nejsou zastaralá:

Alternativní řešení

  • Pokud jste u metody použili atribut CER, odeberte atribut. Tyto atributy nemají žádný vliv na .NET 5 a novější verze.

    // REMOVE the attribute below.
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public void DoSomething()
    {
    }
    
    // REMOVE the attribute below.
    [PrePrepareMethod]
    public void DoSomething()
    {
    }
    
  • Pokud voláte nebo RuntimeHelpers.PrepareContractedDelegatehovor odeberteRuntimeHelpers.ProbeForSufficientStack. Tato volání nemají žádný účinek v .NET 5 a novějších verzích.

    public void DoSomething()
    {
        // REMOVE the call below.
        RuntimeHelpers.ProbeForSufficientStack();
    
        // (Remainder of your method logic here.)
    }
    
  • Pokud voláte RuntimeHelpers.PrepareConstrainedRegions, odeberte hovor. Toto volání nemá žádný účinek v .NET 5 a novějších verzích.

    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
        }
    }
    
  • Pokud voláte RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup, nahraďte hovor standardním try/catch/finally blokem.

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

Potlačení upozornění

Pokud musíte použít zastaralá rozhraní API, můžete potlačit upozornění v kódu nebo v souboru projektu.

Chcete-li potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, které chcete zakázat a znovu povolit upozornění.

// Disable the warning.
#pragma warning disable SYSLIB0004

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0004

Pokud chcete potlačit všechna SYSLIB0004 upozornění v projektu, přidejte <NoWarn> do souboru projektu vlastnost.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0004</NoWarn>
  </PropertyGroup>
</Project>

Další informace naleznete v tématu Potlačení upozornění.

Viz také