Condividi tramite


SYSLIB1027: il parametro del costruttore primario di tipo 'Microsoft.Extensions.Logging.ILogger' è nascosto da un campo

Una classe ha un parametro del costruttore primario di tipo ILogger nascosto da un campo nella classe o in una classe di base, che ne impedisce l'uso.

Ad esempio, la classe seguente genera la SYSLIB1027 diagnostica:

partial class C(ILogger logger)
{
    private readonly object logger = logger;

    [LoggerMessage(EventId = 0, Level = LogLevel.Debug, Message = "...")]
    public partial void M1();
}

Soluzioni alternative

Rimuovere il campo o il costruttore primario. Per altre informazioni, vedere Utilizzo di base.

Sopprimere avvisi

È consigliabile usare una delle soluzioni alternative quando possibile. Tuttavia, se non è possibile modificare il codice, è possibile eliminare l'avviso tramite una #pragma direttiva o un'impostazione <NoWarn> di progetto. Se la diagnostica del SYSLIB1XXX generatore di origine non viene visualizzata come errore, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare gli avvisi nel codice (sostituire l'ID di diagnostica in base alle esigenze):

// Disable the warning.
#pragma warning disable SYSLIB1006

// Code that generates compiler diagnostic.
// ...

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

Per eliminare gli avvisi in un file di progetto (sostituire gli ID di diagnostica in base alle esigenze):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net10.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB1002 project-wide -->
   <NoWarn>$(NoWarn);SYSLIB1002</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);SYSLIB1002</NoWarn>
   <NoWarn>$(NoWarn);SYSLIB1006</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);SYSLIB1002;SYSLIB1006;SYSLIB1007</NoWarn>
  </PropertyGroup>
</Project>

Vedere anche