Базовый тип не является 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
файлы.