Классы LINQ to SQL не совместимы с CLS?

Я использую LINQ to SQL в качестве слоя доступа к данным для нового проекта. Я добавил свои таблицы базы данных в конструктор, и все хорошо.

Всякий раз, когда я использую один из этих классов в функции, Visual Studio предупреждает меня о том, что "тип xxxx не совместим с CLS" или что "тип возврата функции xxxx не совместим с CLS"

Это проблема с классами, которые генерирует LINQ to SQL? Это имеет значение? Могу ли я отключить эти предупреждения где-нибудь? Мой список ошибок VS забит этими предупреждениями, что затрудняет просмотр чего-либо еще.

РЕДАКТИРОВАТЬ:

Извините, я должен был упомянуть, что это проекты VB.NET.:)

4 ответа

Решение

Бен М имеет правильное представление о проблеме.

Самый быстрый способ решить эту проблему в проекте VB.Net - сделать сборку несовместимой с CLSC и, следовательно, избежать этих предупреждений. Добавление следующей строки к любому из ваших файлов сделает свое дело

<Assembly: CLSCompliant(False)>

Лучший файл для добавления - AssemblyInfo.vb внутри папки "Мой проект".

Я нашел эту ссылку на MSDN Connect:

При добавлении отношений наследования между классами в конструкторе O/R уровень доступа к сгенерированному члену хранилища резервных копий атрибута Id "_Id" изменяется с частного на защищенный, что приводит к нарушению правила CLS. Свойство Id используется в ассоциации между классами.

Если вы хотите избавиться от предупреждений, вы можете использовать:

#pragma warning disable 3021

Или, если вы хотите отключить их для всего проекта, добавьте 3021 в поле "Подавить предупреждения" на вкладке "Построение" свойств вашего проекта в Visual Studio.

В конечном итоге это зависит от того, какие типы возвращаются вашей базой данных и каковы имена этих типов.

Одной из проблем, связанных с совместимостью с CLS, является тип, в котором есть два общедоступных члена, имена которых отличаются только регистром, например MyField и myField.

Вот статья, которая должна помочь вам определить, где возникают ваши проблемы с соответствием CSS и справиться с ними. Если вам нужна дополнительная помощь, напишите код, и мы посмотрим, что мы можем сделать.

Я обычно вижу эту ошибку, когда я использую типы из одной сборки, которая не имеет атрибута CLSCompliant в другой сборке, которая имеет.

То есть ваши классы Linq to SQL отличаются от тех, которые вы пишете? Вы указали [assembly: CLSCompliant(true)] в некоторых, но не во всех проектах в вашем решении?

Другие вопросы по тегам