Как реализовать устранение предупреждения CLS-несовместимости кода: CLSCompliant(false) vs pragma warning disable?

Всем привет! Не поделитесь своими мыслями по устранению предупреждений о несовместимости кода с CLS? Я правильно понимаю, что применение атрибута CLSCompliant(false) к участку кода приведет к тому, что сборка будет несовместима с другими проектами, где есть требование к CLS-совместимости. Спасет ли в таком случае использование директивы pragma?

public class ApplicationContext : DbContext
{
    // #pragma warning disable 3003
    // or
    // [CLSCompliant(false)]
    public virtual DbSet<Item> Items{ get; set; }
    // #pragma warning restore 3003
}
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
CLS придуман как гарантия совместимости байт-кода сборок, скомпилированных из разных языков.
В примере выше единственно, чего мы можем опасаться, это того, что завтра будет выпущен CLS-совместимый компилятор языка Х.З.#, и байт-код этого Х.З.# не сможет работать с нашими Items из C#, поскольку свойство Items не является CLS-совместимым.

Если же все сборки, которые у нас будут вместе работать, написаны на одном языке — C#, проблемы не существует.

На практике, если в иерархии assembly / type / member нигде атрибутов CLSCompliant не ставить, вся сборка считается не CLS-совместимой и никаких предупреждений не будет.
https://docs.microsoft.com/en-us/dotnet/api/system...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы