2009-10-28 10 views
9

Al compilar mi solución, consigo varias señales de advertencia de los siguientes:'matrices como argumentos atributo no es compatible con CLS' advertencia, pero no hay información de tipo dado

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

Ninguna otra información sobre el tipo no es compatible es dado. En mis proyectos, tengo algunos atributos que toman argumentos de arreglo de params en sus constructores, pero todos son internos, y eso no debería afectar el cumplimiento de CLS. ¿Por qué se está dando esta advertencia y de qué tipo se está dando?

+1

¿Encontró una manera fácil de encontrar dónde se estaba causando la advertencia? – jamiebarrow

Respuesta

6

CS3016.

Si tiene un atributo que toma una matriz como argumento y el proyecto está marcado como CLSCompliant, recibirá esta advertencia.

+3

Pero el atributo es interno al ensamblado, no es públicamente accesible. Eso no debería afectar el cumplimiento de CLS. – thecoop

3

Me encontré con esto hoy. Tuve 4 instancias de la advertencia apareciendo. Luego descubrí que tenía el atributo que decoraba 4 métodos públicos en ese ensamblaje. Cuando los eliminé uno por uno, los errores desaparecieron uno por uno.

Además, si no está conforme con CLS, puede poner [CLSCompliant (false)] en los métodos decorados con el atributo (o la clase en la que se definen los métodos). Ponerlo en el constructor/clase de atributo ofensivo no funciona. Supongo que esto tiene sentido ya que, en última instancia, el atributo probablemente esté expuesto fuera del ensamblaje como parte de los metadatos del método público.

+4

Además, si está de acuerdo con no cumplir con CLS, puede poner [CLSCompliant (false)] en los métodos decorados con el atributo (o la clase en la que se definen los métodos). Ponerlo en el constructor/clase de atributo ofensivo no funciona. Supongo que esto tiene sentido ya que, en última instancia, el atributo probablemente esté expuesto fuera del ensamblaje como parte de los metadatos del método público. – Brent

0

me encontré con el mismo problema, y ​​lo que tenía que hacer era utilizar el diálogo "Buscar en archivos" en VS2010 seleccione Usar: comodines y en el buscar cuadro de texto, introduzca

\[*\(*\)\] 

Eso produce una lista de todas las instancias de atributos. Fui uno por uno y pude identificar y corregir las advertencias.

Cuestiones relacionadas