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.