Может ли сборка, включающая не-CLS-совместимую ссылку, быть CLS-совместимой? - PullRequest
9 голосов
/ 12 февраля 2011

У меня есть существующая DLL, которая не совместима с CLS, на которую я ссылаюсь из своего собственного проекта. Когда я отмечаю свою сборку как CLS-совместимую, я получаю предупреждения компилятора о том, что имена в указанной сборке не совместимы с CLS.

Есть ли способ, которым я могу сохранить свою сборку CLS-совместимой и пометить ссылочную как нет?

1 Ответ

10 голосов
/ 12 февраля 2011

Да, ваша DLL может быть CLS-совместимой, если она не предоставляет никаких не-CLS-совместимых элементов из указанной сборки, то есть она не упоминает их ни в одной из своих открытых или защищенныхчлены или типы.(Он по-прежнему может использовать их как в закрытых, так и во внутренних членах и типах.)

Если вашей DLL действительно необходимо предоставлять типы непосредственно из несовместимой DLL, вы можете попробовать инкапсулировать эти типы в свои собственные оболочки (напримерметод может вернуть MyWrapperAroundNaughtyType вместо NaughtyType), или вы можете пометить соответствующих членов вашего API CLSCompliant(false), чтобы отказаться только от этих членов от проверки компилятором.

...