2009-10-28 14 views
9

Quando si compila la mia soluzione, ho diversi avvertimenti delle seguenti operazioni:'Array come argomenti attributo non è compatibile con CLS' avvertimento, ma nessuna informazione di tipo dato

warning CS3016: Arrays as attribute arguments is not CLS-compliant 

Nessun'altra informazione su che tipo non è conforme viene data. Nei miei progetti ho alcuni attributi che accettano gli argomenti dell'array params nei loro costruttori, ma sono tutti interni e questo non dovrebbe influire sulla conformità al CLS. Perché viene dato questo avvertimento e di che tipo viene dato?

+1

Hai trovato un modo semplice per scoprire dove è stato causato l'avviso? – jamiebarrow

risposta

6

CS3016.

Se si dispone di un attributo che accetta un array come argomento e il progetto è contrassegnato come CLSCompliant verrà visualizzato questo avviso.

+3

Ma l'attributo è interno all'assembly, non accessibile pubblicamente. Ciò non dovrebbe influire sulla conformità CLS. – thecoop

3

Mi sono imbattuto in questo oggi. Ho avuto 4 istanze dell'avvertimento mostrate. Ho poi scoperto che avevo l'attributo che decora 4 metodi pubblici in quell'assemblea. Quando li ho rimossi uno a uno, gli errori sono andati via uno per uno.

Inoltre, se si è soddisfatti di non essere compatibili con CLS, è possibile inserire [CLSCompliant (false)] sui metodi decorati con l'attributo (o la classe su cui sono definiti i metodi). Metterlo sul costruttore/classe attributo offendente non fa il trucco. Immagino che questo abbia senso dal momento che, in definitiva, l'attributo è probabilmente esposto all'esterno dell'assieme come parte dei metadati del metodo pubblico.

+4

Inoltre, se si è soddisfatti di non essere compatibili con CLS, è possibile inserire [CLSCompliant (false)] sui metodi decorati con l'attributo (o la classe su cui sono definiti i metodi). Metterlo sul costruttore/classe attributo offendente non fa il trucco. Immagino che questo abbia senso dal momento che, in definitiva, l'attributo è probabilmente esposto all'esterno dell'assieme come parte dei metadati del metodo pubblico. – Brent

0

Ho incontrato lo stesso problema, e quello che ho dovuto fare è stato quello di utilizzare la finestra di dialogo "Trova nei file" in VS2010 selezionare Usa: I caratteri jolly e in Trova: casella di testo, immettere

\[*\(*\)\] 

Questo produce un elenco di tutte le istanze degli attributi. Sono andato uno ad uno e sono stato in grado di identificare e correggere gli avvertimenti.