Condividi tramite


SYSLIB1230: La derivazione da un'interfaccia attribuita GeneratedComInterface definita in un altro assembly non è supportata

In .NET 9 e versioni successive, la definizione di un'interfaccia con l'attributo GeneratedComInterfaceAttribute che deriva da un'interfaccia con attributi /GeneratedComInterface definita in un altro assembly è supportata con le restrizioni seguenti:

  • Il tipo di interfaccia di base deve essere compilato con lo stesso framework del tipo derivato.
  • Il tipo di interfaccia di base non deve nascondere alcun membro dell'interfaccia di base, se presente.

Inoltre, tutte le modifiche apportate a eventuali offset dei metodi virtuali generati nella catena di interfaccia di base definita in un altro assembly non verranno considerati nelle interfacce derivate fino a quando il progetto non viene ricompilato.

Quando si definisce un'interfaccia con l'attributo GeneratedComInterfaceAttribute che deriva da un'interfaccia GeneratedComInterfacecon attributi definita in un altro assembly, l'avviso di SYSLIB1230 viene generato per informare l'utente delle limitazioni. Per confermare le limitazioni, eliminare l'avviso nel codice come indicato di seguito:

// Disable the warning.
#pragma warning disable SYSLIB1230
[GeneratedComInterface]
interface IDerived : IBaseInOtherAssembly
// Re-enable the warning.
#pragma warning restore SYSLIB1230
{
    // the interface definition
}

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