Классы 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)]
в некоторых, но не во всех проектах в вашем решении?