strano avviso su ExtensionAttribute
-
23-08-2019 - |
Domanda
Ricevo uno strano avviso:
Il tipo predefinito "System.Runtime.CompilerServices.ExtensionAttribute" è definito in più assembly nell'alias globale;utilizzando la definizione da 'c:\Program Files eference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
Non viene fornito alcun numero di riga, quindi è difficile capire di cosa si tratta.
Il codice di errore del compilatore è CS1685
Soluzione
Si sta utilizzando dll di qualcuno (o il proprio), che ha realizzato questo attributo (con lo stesso nome) se stesso come un mezzo per l'utilizzo di alcune funzioni C # 3.0 in pre .NET 3.5 tempi di esecuzione? (Un trucco comune)
Questa è la causa probabile. Dal momento che sta usando quello corretto (MS uno nel GAC) questo non è un problema, però si dovrebbe dare la caccia l'altro e rimuoverlo.
Altri suggerimenti
Ampliando (corretta) la risposta di ShuggyCoUk
In verità non importa quale versione del attributo viene utilizzato (GAC, terza parte, ecc ...). Tutto ciò che conta è il # / VB compilatore C può trovare qualche attributo con il nome corretto. L'attributo non serve funzionale nel codice. Esiste puramente per dire al compilatore "hey, questo è un metodo di estensione".
È possibile ignorare questo avvertimento.
Sono d'accordo con ShuggyCoUk sul fatto che la migliore linea d'azione è provare a rimuovere la dll incriminata.Tuttavia, ciò potrebbe non essere possibile.
Un altro modo per risolvere l'ambiguità di cui si lamenta il compilatore è cambiare l'alias della dll di riferimento.Nel tuo progetto, nella cartella Riferimenti, se clicchi su una dll referenziata vedrai la proprietà Alias.Per impostazione predefinita, è "global", che ti consente di fare cose come "global::SomeNamespace.SomeType".Potresti semplicemente essere in grado di cambiare l'alias in qualcos'altro.
Ciò ha risolto un problema che avevo per cui dovevo fare riferimento a Microsoft.Scripting.Core.dll, ma conteneva alcuni tipi che erano in conflitto con mscorlib.dll.Ho modificato la proprietà Alias in "ThirdParty" anziché "global" e l'avviso è stato risolto.
Ho lo stesso problema.
Nel mio caso il problema era l'assemblea Mono.Cecil.
Migrazione da riferimenti locali a NuGet, quando aggiungo NHibernate fa riferimento al pacchetto aggiunge questo riferimento automaticamente.
Questo riferimento è stato rimosso, e compilato ancora una volta il mio progetto.
Rimuovi ed essere felice !!
Questa immagine è stata presa da ILSpy ( http://i.stack.imgur.com/Qyd5o .png )
Il compilatore non sa quale System.Runtime.CompilerServices.ExtensionAttribute
Così sta usando il defination da c: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll '
Un dll in uso potrebbe avere lo stesso extenstion.
I innescato questo errore con l'installazione di IIS con .NET 3.5 invece di 4.5 per caso.
Fix è stato quello di aggiungere 4,5 nel in "Aggiungi funzionalità ..." nel pannello di controllo.