1. Имею "class library" А, в котором есть форма и класс к ней на С#.
2. Этот класс используется в DLL-ке Б, в которой создаётся класс, наследуемый от класса из Б. Чтобы компилятор просёк информацию о классе из А пишу "#using<A.dll>.
3. Имею приложение В, которое создаёт объект класса из Б. Для того, чтобы описание класса было видно компилятором, пишу в исходнике В, что "#using<Б.dll>".
А теперь прикол: компилятор компилирует А и Б, но на В даёт ошибку с3624, что не может найти описание класса из А (!). При вставке в В фразы "#using<А.dll>" всё работает.
Почему не проходит вложенность "юзингов"? Ведь при просмотре из В ссылки на Б компилятор найдёт в метаданных ссылку на А?
using это всего-лишь объявление, что будет использоваться namespace
нужно оно только для удобства написания кода, чтобы не писать везде полные имена классов
B>using это всего-лишь объявление, что будет использоваться namespace B>нужно оно только для удобства написания кода, чтобы не писать везде полные имена классов B>не надо путать using с include из С
Не путаете ли вы using, который используется ещё в C++ для введения объекта или всего namespace с тем using'ом, который DLL подключает? Я ж написал, что #using<....DLL>...
MS>Тоесть ты хочешь прописать один корневое наймспейс и чтобы все дочерние пространства имен были видны автоматически. Так нельзя. Это by design.
Нет, речь про другой using, который не область видимости разрешает, а DLL-ки подключает. В общем, см. выше.
B>в C# делается Reference в проекте, и они тоже рекурсивно не подключаются
Ага!
А вообще, странно получается: пользуюсь я чей-то сборкой (с библиотекой внутри). Понятно, что её надо подключить. Но приходится смотреть, что подключала она сама и к своей проге все ссылки прикручивать. Жуть.
Здравствуйте, Umaxik, Вы писали:
U>Мне та библиотека вообще не нужна. Но компилятор ругается и говорит, что тот тип не определён. И даже говорит, какую сборку мне надо подключить.
Если та библиотека (сборка 3) у тебя не используется, т.е. она чисто для внутреннего пользования во 2-й сборке, то на нее в 1-й сборке ссылаться не надо. Но в твоем случае в 3-ей сборке есть базовый тип для класса, описанного во 2-й сборке и который ты используешь в 1-й сборке. Значит тебе непоредственно нужна, ссылка на 3-ю сборку, т.к. в противном случае нет половина необходимых метаданных о классе.