(Верный) CLSCompliant позорит неиспользованные ссылки

JQuery не собирается помогать Вам много здесь, поскольку Вы действительно не обеспокоены обходом/управлением DOM (кроме создания тега привязки). Если все Ваши URL были в < p класс = "URL" > теги тогда, возможно.

ваниль А решение JavaScript, вероятно, что Вы хотите, и поскольку судьба имела бы его, , у этого парня должны быть Вы, покрыл .

29
задан HostileFork 14 November 2012 в 17:52
поделиться

2 ответа

Я просмотрел официальные документы по CLS ( http://msdn.microsoft.com/en-us/netframework/aa569283.aspx ), но моя голова взорвалась, прежде чем я смог найти простой ответ.

Но я думаю, что основа в том, что компилятор, чтобы проверить соответствие CLS LibraryC, должен изучить возможные конфликты именования с LibraryA.

Компилятор должен проверить все «части типа, которые доступны или видимы за пределами определяющей сборки» (Правило 1 CLS).

Поскольку открытый класс Class1InLibraryC наследует Class2InLibraryB, он также должен проверять соответствие CLS и LibraryA, в частности, потому что «Ploeh . * "теперь" находится "в области действия" правила 5 CLS "Все имена, введенные в область действия, совместимую с CLS, должны быть разными, независимо от вида".

Изменение пространства имен Class1InLibraryB или Class1InLibraryC, чтобы они стали отдельными, похоже, убеждает компилятор в том, что больше нет шансов на конфликт имен.

Если вы выберете вариант (2), добавьте ссылку и скомпилируете, вы убедитесь, что ссылка фактически не отмечена в результирующих метаданных сборки, так что это только зависимость времени компиляции / проверки.

19
ответ дан 28 November 2019 в 02:03
поделиться

Помните, что CLS - это набор правил, которые применяются к сгенерированным сборкам и предназначены для поддержки взаимодействия между языками. В некотором смысле он определяет наименьшее общее подмножество правил, которым должен следовать тип, чтобы гарантировать его независимость от языка и платформы. Совместимость с CLS также применяется только к элементам, которые видны за пределами их сборки определения.

Рассмотрение некоторых рекомендаций, которым должен следовать CLS-совместимый код:

  • Избегайте использования имен, обычно используемых в качестве ключевых слов в языках программирования.

    1297] Не следует ожидать, что пользователи фреймворка смогут создавать вложенные типы.

  • Предположим, что реализации методов с одинаковыми именами и сигнатурами на разных интерфейсах независимы.

Правила определения соответствия CLS следующие:

  • ] Когда сборка не содержит явного System. предполагается, что он несет System.CLSCompliantAttribute (false).
  • По умолчанию тип наследует атрибут соответствия CLS своего включающего типа (для вложенных типов) или получает уровень соответствия, связанный с его сборкой (для типов верхнего уровня) .
  • По умолчанию другие члены (методы, поля, свойства и события) наследуют соответствие CLS своего типа.

Теперь, что касается компилятора (правило CLS 1), он должен иметь возможность применять правила соответствия CLS к любой информации, которая будет экспортироваться за пределы сборки, и считает, что тип совместим с CLS, если все его общедоступные части (те классы, интерфейсы, методы, поля, свойства и события, которые доступны для кода, выполняемого в другой сборке) либо

  • имеют подписи, состоящие только из CLS-совместимых типов, или
  • специально помечены как несовместимые с CLS.

По правилам CTS область действия представляет собой просто группу / набор имен, и в пределах области действия имя может относиться к нескольким объектам, если они имеют разные типы ( методы, поля, вложенные типы, свойства, события) или имеют разные сигнатуры. Именованный объект имеет свое имя ровно в одной области, поэтому для идентификации этой записи должны применяться и область, и имя. Область действия уточняет имя.

Поскольку типы именуются, имена типов также группируются в области действия. Чтобы полностью идентифицировать тип, имя типа должно уточняться областью. Имена типов ограничиваются сборкой, содержащей реализацию этого типа.

Для областей, совместимых с CLS, все имена должны быть разными, независимо от типа, за исключением случаев, когда имена идентичны и разрешаются посредством перегрузки. Другими словами, в то время как CTS позволяет одному типу использовать одно и то же имя для поля и метода, CLS этого не делает (Правило 5 CLS).

Сделав еще один шаг вперед, CLS-совместимый тип не должен требовать реализация несовместимых с CLS типов (Правило 20 CLS) и также должна наследоваться от другого типа жалобы CLS (Правило 23 CLS).

Сборка может зависеть от других сборок, если реализации в области ресурсов ссылки одной сборки которые относятся к другой сборке или принадлежат ей.

  • Все ссылки на другие сборки разрешаются под управлением текущей области сборки.
  • Всегда можно определить, в какой области сборки выполняется конкретная реализация. Все запросы, исходящие из этой области сборки, разрешаются относительно этой области.

В конечном итоге все это означает, что для проверки соответствия типа CLS компилятор должен иметь возможность проверить, что все общедоступные части этого типа также соответствуют CLS. Это означает, что он должен гарантировать, что имя уникально в пределах области, что оно не зависит от несовместимых с CLS типов для частей его собственной реализации и что оно наследуется от других типов, которые также являются CLS-совместимыми. Единственный способ сделать это - изучить все сборки, на которые ссылается тип.

Помните, что этап сборки в Visual Studio, по сути, представляет собой оболочку графического интерфейса пользователя для выполнения MSBuild, который в конечном итоге является не чем иным, как сценарием для вызвать компилятор командной строки C #. Чтобы компилятор мог проверить соответствие типа CLS, он должен знать и уметь находить все сборки, которые ссылаются на тип (но не на проект). Поскольку он вызывается через MSBuild и, в конечном итоге, Visual Studio, единственный способ для Visual Studio (MSBuild) сообщить ему об этих сборках - включить их в качестве ссылок.

Очевидно, поскольку компилятор может определить, что это так. отсутствующие ссылки для проверки соответствия CLS и успешной компиляции, было бы неплохо, если бы он мог просто включить эти ссылки автоматически от нашего имени. Проблема здесь в том, чтобы определить , какую версию сборки включить, и , где эта сборка находится в файловой системе. Вынуждая разработчика предоставить эту информацию, компилятор помогает гарантировать, что ему предоставлена ​​правильная информация.

7
ответ дан 28 November 2019 в 02:03
поделиться
Другие вопросы по тегам:

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