¿Las clases de LINQ to SQL no son compatibles con CLS?
-
22-07-2019 - |
Pregunta
Estoy usando LINQ to SQL como mi capa de acceso a datos para un nuevo proyecto. He agregado mis tablas de base de datos al diseñador y todo está bien.
Cada vez que uso una de estas clases en una función, Visual Studio me advierte que 'Tipo xxxx no es compatible con CLS' o que 'El tipo de función de retorno xxxx no es compatible con CLS'
¿Es este un problema con las clases que genera LINQ to SQL? ¿Importa? ¿Puedo desactivar estas advertencias en cualquier lugar? Mi lista de errores de VS está obstruida con estas advertencias, lo que dificulta ver cualquier otra cosa.
EDITAR:
Lo siento, debería haber mencionado que estos son proyectos VB.NET. :)
Solución
Ben M tiene la idea correcta sobre el problema.
La forma más rápida de resolver esto en un proyecto VB.Net es hacer que el ensamblado no cumpla con CLS y, por lo tanto, evitar esas advertencias. Agregar la siguiente línea a cualquiera de sus archivos hará el truco
<Assembly: CLSCompliant(False)>
El mejor archivo para agregarlo es AssemblyInfo.vb dentro de " My Project " carpeta.
Otros consejos
Encontré este enlace en MSDN Connect:
Al agregar relaciones de herencia entre clases en el diseñador de O / R, el nivel de acceso en el generado miembro de la tienda de respaldo del Id El atributo, " _Id " ;, se cambia de privado a protegido, causando el CLS violación de la regla. La propiedad Id es utilizado en una asociación entre el clases.
Si desea deshacerse de las advertencias, puede usar:
#pragma warning disable 3021
O, si desea deshabilitarlos en todo el proyecto, agregue 3021 al " Suprimir advertencias " campo en la pestaña Generar de las propiedades de su proyecto en Visual Studio.
En última instancia, depende de qué tipos devuelve su base de datos y cuáles son los nombres de esos tipos.
Un problema relacionado con el cumplimiento de CLS es un tipo que tiene dos miembros expuestos públicamente que difieren en nombre solo por caso, p. MyField y myField.
Aquí está un artículo eso debería ayudarlo a determinar dónde están ocurriendo sus problemas de cumplimiento de CSS y tratarlos. Si necesita más ayuda, presente un código y veremos qué podemos hacer.
Por lo general, veo ese error cuando consumo tipos de un ensamblado que no tiene el CLSCompliant en otro ensamblado que sí lo hace.
Es decir, ¿sus clases de Linq a SQL están en un proyecto diferente a las funciones que está escribiendo? ¿Ha especificado [ensamblaje: CLSCompliant (verdadero)]
en algunos pero no en todos los proyectos de su solución?