Подтвердить что ты не робот

Тип аргумента не соответствует требованиям CLS, почему?

Я получаю предупреждение, подобное этому alt text Если вы знаете, что это такое, объясните и помогите мне избавиться от него. Нам.

4b9b3361

Ответ 1

В файле AssemblyInfo.cs вы, вероятно, получили строку, которая читает

[assembly:CLSCompliant(true)]

Если вы это сделаете, тогда должны быть выполнены следующие правила. (Copy-Pasta из http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/)

  • Неподписанные типы не должны быть частью открытого интерфейса класса. Это означает, что в открытых полях не должно быть неподписанных типов, таких как uint или ulong, общедоступные методы не должны возвращать неподписанные типы, параметры, переданные публичной функции, не должны иметь неподписанные типы. Однако неподписанные типы могут быть частью частных членов.

  • Небезопасные типы, такие как указатели, не должны использоваться с публичными членами. Однако они могут использоваться с частными членами.

  • Имена классов и имена участников не должны различаться только в зависимости от их случая. Например, мы не можем использовать два метода с именем MyMethod и MYMETHOD.

  • Только свойства и методы могут быть перегружены, операторы не должны быть перегружены.

Ответ 2

Это старый вопрос, но я подумал, что лучшее объяснение должно быть у будущих исследователей (таких как я).

Во-первых, ссылки в других ответах дают подробные сведения о причине предупреждения.

Однако, чтобы суммировать, код, написанный для Common Language Runtime (например, С#), является CLS-совместимым, если он может взаимодействовать с другими языками, разработанными для CLR. Это означает, что некоторые типы данных, характерные для языка, которые не являются общими для всей среды выполнения, несовместимы. Быстрое и легкое исправление этого в отношении переменных и методов заключается в том, чтобы дать им модификатор видимости internal, который указывает, что метод, класс, свойство и т.д. Не видны за пределами сборки, для которой он строится. Это нужно делать только на тех элементах, которые вам не нужны или вы хотите использовать вне сборки; для тех, кого вы хотите видеть, используйте типы данных, совместимые с CLS.

Ответ 3

Дополнительная информация:

И вы можете получить эти предупреждения в сборке, совместимой с CLS, которая ссылается на не совместимую с CLS сборку (и предоставляет ее члены, не совместимые с CLS):