1

J'utilise LINQ to SQL comme couche d'accès aux données pour un nouveau projet. J'ai ajouté mes tables de base de données au concepteur et tout va bien.Les classes LINQ to SQL ne sont pas compatibles CLS?

Chaque fois que j'utilise une de ces classes dans une fonction, Visual Studio me avertit que « type xxxx est pas conforme CLS » ou que « type de retour de la fonction xxxx est pas conforme CLS »

Est-ce un problème avec les classes que génère LINQ to SQL? Est-ce important? Puis-je désactiver ces avertissements n'importe où? Ma liste d'erreurs VS est obstruée par ces avertissements, ce qui rend difficile toute autre observation.

EDIT:

Désolé, je l'ai dit ce sont des projets VB.NET. :)

+0

Je n'ai pas ce problème. À quoi ressemble votre schéma? Est-ce que l'un des noms de colonne viole les règles CLS? Comme commencer avec un caractère non-alphabétique? – tvanfosson

Répondre

2

Ben M a la bonne idée sur le problème.

Le moyen le plus rapide de résoudre ce problème sur un projet VB.Net est de rendre l'assemblage non conforme CLSC et donc d'éviter ces avertissements. L'ajout de la ligne suivante à l'un de vos fichiers fera l'affaire

<Assembly: CLSCompliant(False)> 

Meilleur fichier pour l'ajouter dans AssemblyInfo.vb est à l'intérieur du dossier « Mon projet ».

+0

Excellent, c'est l'information que je cherchais. Bizarrement, ce n'est pas le projet avec le fichier DBML qui a été configuré pour être compatible CLSC mais le projet MSTest qui l'a référencé. Merci à tous pour leur aide. – Nick

0

Cela dépend finalement de quels types sont retournés par votre base de données et quels sont les noms de ces types. Un problème concernant la conformité CLS est un type qui a deux membres exposés publiquement qui ne diffèrent que par le nom, par ex. MyField et myField.

Voici an article qui devrait vous aider à déterminer vos problèmes de conformité CSS se produisent et résoudre les problèmes. Si vous avez besoin de plus d'aide, posez du code et nous verrons ce que nous pouvons faire.

3

J'ai trouvé this link on MSDN Connect:

Lors de l'ajout des relations d'héritage entre les classes dans le concepteur O/R, le niveau acess sur l'élément de magasin généré de support de l'Id attribut, "_id", est changé de privé à protégé, entraînant la violation des règles CLS . La propriété Id est utilisée dans une association entre les classes .

Si vous voulez vous débarrasser des avertissements, vous pouvez utiliser:

#pragma warning disable 3021 

Ou, si vous voulez les désactiver tout le projet, ajoutez 3021 au champ « Supprimer les avertissements » dans la Construire l'onglet des propriétés de votre projet dans Visual Studio.

+0

Hmmm, fermé avec un "ne va pas réparer" .... on dirait que je vais devoir essayer de les filtrer. – Nick

0

Je vois généralement cette erreur lorsque je consomme des types d'un assembly qui n'a pas l'attribut CLSCompliant dans un autre assembly qui le fait. En d'autres termes, vos classes Linq to SQL sont-elles dans un projet différent des fonctions que vous écrivez? Avez-vous spécifié [assembly: CLSCompliant(true)] dans certains projets de votre solution, mais pas dans tous?

+0

Oui, le fichier DBML se trouve dans un projet distinct des fonctions sur lesquelles les avertissements sont présents. Je n'ai pas spécifié CLSCompliance n'importe où mais de la lecture il semble que VB.NET le fait automatiquement pour les projets de la bibliothèque de classes. – Nick