Базовый тип не является CLS-совместимым, каковы причины этого предупреждения?

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

В чем может быть причина (ы) этого? Компилятор не дает никаких подсказок о том, почему базовый тип не совместим с CLS

2 ответа

Решение

У вас наверное есть [assembly:CLSCompliant(true)] где-то в этом конкретном проекте. Это запускает компилятор для проверки всех типов на соответствие CLS. Вы можете переопределить это для типа или метода или чего-то с [CLSCompliant(false)],

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

Написание кода, совместимого с CLS Каноническим примером является использование UInt32, который не является частью Спецификации общего языка (CLS) - следовательно, вам нужно использовать Int64, чтобы быть CLS-совместимым, или удалить атрибут (объявить себя не-cls-совместимым).

Нужно больше кода, чтобы идентифицировать ошибочную строку кода. Больше информации об ошибке, которую вы получаете.

Ставить <AssemblyClsCompliant>false</AssemblyClsCompliant> в твоем .csproj файла вашего базового проекта и проекта, который на него ссылается.

Мы используем MsBuildTasks и замечаем, что в Common.targets файл, CLSCompliantбыло установлено значение true. Это значение устанавливалось в каждом изAssemblyInfo файлы.

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