Condividi tramite


IL2026: i membri attribuiti con RequiresUnreferencedCode possono interrompersi durante il taglio

Causa

Chiamata (o accesso tramite reflection) di un membro annotato con RequiresUnreferencedCodeAttribute.

Ad esempio:

[RequiresUnreferencedCode("Use 'MethodFriendlyToTrimming' instead", Url="http://help/unreferencedcode")]
void MethodWithUnreferencedCodeUsage()
{
}

void TestMethod()
{
    // IL2026: Using method 'MethodWithUnreferencedCodeUsage' which has 'RequiresUnreferencedCodeAttribute'
    // can break functionality when trimming application code. Use 'MethodFriendlyToTrimming' instead. http://help/unreferencedcode
    MethodWithUnreferencedCodeUsage();
}

Descrizione regola

RequiresUnreferencedCodeAttribute indica che il membro fa riferimento al codice che può essere rimosso dal trimmer.

Esempi comuni prevedono:

  • Load(String) è contrassegnato come RequiresUnreferencedCode perché l'assembly caricato può accedere ai membri che sono stati eliminati. Il trimmer rimuove tutti i membri dal framework tranne quelli usati direttamente dall'applicazione, quindi è probabile che il caricamento di nuovi assembly in fase di esecuzione tenterà di accedere ai membri mancanti.

  • XmlSerializer è contrassegnato come RequiresUnreferencedCode perché XmlSerializer usa la reflection complessa per analizzare i tipi di input. La reflection non può essere rilevata dal trimmer, pertanto i membri usati in modo transitivo dai tipi di input possono essere eliminati.