Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Одинаковые fully qualified type names - а ошибки нет?

778  1 2 все
alex445 коренной житель10.06.22 15:18
10.06.22 15:18 

Завожу в солюшене два проекта. В свойствах указываю одинаковые имена сборок и дефолтные простнаства имён. Создаю класс в одном проекте и затем копирую его в другой. Итого имеем полностью совпадающие полные квалификационные имена классов. Компиляция проходит нормально. Почему?


Играет роль, что один проект на .NET Framework, а второй - на .NET? Формально-то полная квалификация имени одинаковая, а про разные фреймворки никто не говорил.

#1 
Отпускник гость10.06.22 15:22
NEW 10.06.22 15:22 
в ответ alex445 10.06.22 15:18

они не partial?

#2 
alex445 коренной житель10.06.22 15:28
NEW 10.06.22 15:28 
в ответ Отпускник 10.06.22 15:22, Последний раз изменено 10.06.22 15:30 (alex445)

Нет. Обычные публичные классы.


Я один большой солюшен переписываю с кучей проектов. С .NET Framework на .NET. И хочу в этом же солюшене параллельно создавать копии этих проектов, только на другом фреймворке.


Да, имена проектов разные (скажем, CommonLibrary и CommonLibrary.Net5), но они же не входят в полную квалификацию, а лишь имена сборок входят. А имена сборок одинаковые.

#3 
alex445 коренной житель10.06.22 15:32
NEW 10.06.22 15:32 
в ответ alex445 10.06.22 15:28

А что, Срывапокровов забанили? Теперь он с другого акка?

#4 
Программист коренной житель10.06.22 15:52
NEW 10.06.22 15:52 
в ответ alex445 10.06.22 15:18

Не совсем понимаю, ты ожидаешь какой-то ошибки?

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

#5 
Отпускник гость10.06.22 16:00
NEW 10.06.22 16:00 
в ответ alex445 10.06.22 15:32

да, невежливо отвечал на тупые вопросы))

#6 
alex445 коренной житель10.06.22 17:39
NEW 10.06.22 17:39 
в ответ Программист 10.06.22 15:52

Не совсем понимаю, ты ожидаешь какой-то ошибки?

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

А, понял. Т.е. положим есть третий проект, к которому я могу подключить один из двух вышеупомянутых CommonLibrary и CommonLibrary.Net5 с одинаковым кодом. Про совместимость фреймворков сейчас не будем. Тогда мне нужно просто выбрать правильный проект, чтобы всё заработало без ошибок?


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

#7 
Murr патриот11.06.22 00:20
Murr
NEW 11.06.22 00:20 
в ответ alex445 10.06.22 15:18

Почему?

------

А почему должно быть по-другому?

#8 
alex445 коренной житель11.06.22 00:48
NEW 11.06.22 00:48 
в ответ Murr 11.06.22 00:20

Я помнил, что в этом случае Студия ругается, но забыл когда. Ругается, когда пытаешься в одно место добавить ссылки на типы с одинаковыми именами.

#9 
Программист коренной житель12.06.22 21:38
NEW 12.06.22 21:38 
в ответ alex445 10.06.22 17:39
А, понял. Т.е. положим есть третий проект, к которому я могу подключить один из двух вышеупомянутых CommonLibrary и CommonLibrary.Net5 с одинаковым кодом. Про совместимость фреймворков сейчас не будем. Тогда мне нужно просто выбрать правильный проект, чтобы всё заработало без ошибок?

Именно. Более того, я бы сказал, что это вполне себе респространенный случай :)

Если бы я делал компоненту, сборки которой отличаются исключительно компиляцией, то я бы сделал бы 1 солюшен, 1 исходник и Х проектов (скажем x86 и x64).

#10 
alex445 коренной житель12.06.22 22:21
NEW 12.06.22 22:21 
в ответ Программист 12.06.22 21:38

А файлы с кодом были бы лишь в одном проекте, а в другом - лишь ссылки на них?

#11 
Murr патриот13.06.22 01:39
Murr
NEW 13.06.22 01:39 
в ответ alex445 12.06.22 22:21
лишь в одном проекте

-----

Сгенерировать идею об том, что они вообще ни в одном проекте что-то мешает? смущ


#12 
Программист коренной житель13.06.22 08:08
NEW 13.06.22 08:08 
в ответ alex445 12.06.22 22:21

Да. Или везде только ссылки.

Хотя, я уверен, можно придумать структуру в которой каждый проект будет включать исходники (т.е. можно обойтись без ссылок)

#13 
alex445 коренной житель13.06.22 10:56
NEW 13.06.22 10:56 
в ответ Программист 13.06.22 08:08, Последний раз изменено 13.06.22 14:06 (alex445)

Что-то не понял. А чем плохо переключение конфигураций архитектур x64-x86? Студия билдит все эти конфиги в разные папки - не перепутаешь. Может, можно и одновременный билд под несколько архитектур сразу настроить, без переключения - не знаю. Но суть в том, что зачем иметь кучу проектов с ссылками на файлы или ещё что-то, если можно просто сбилдить?


Какие-то невероятно навороченные архитектурно-сборочные пайплайны?

#14 
Программист коренной житель13.06.22 14:26
NEW 13.06.22 14:26 
в ответ alex445 13.06.22 10:56
Какие-то невероятно навороченные архитектурно-сборочные пайплайны?

Представь себе, что ты пишешь ну например log4net. Можно конечно сделать 1 проект и переключать профили, чтобы получить 5-6-10 разных сборок, но тогда придется стартовать и бильд 5-6-10 раз. Гораздо проще сделать 5-6-10 проектов на одних и техже исходниках и за один старт получить все необходимые сборки.

#15 
alex445 коренной житель13.06.22 15:43
NEW 13.06.22 15:43 
в ответ Программист 13.06.22 14:26
Гораздо проще сделать 5-6-10 проектов на одних и техже исходниках и за один старт получить все необходимые сборки.

Неужели такие костыли до сих пор юзаются? Ничего нет, чтобы автоматом все или выбранные конфиги собирались?

#16 
alex445 коренной житель13.06.22 15:45
NEW 13.06.22 15:45 
в ответ alex445 13.06.22 15:43

Вот что нашёл

https://docs.microsoft.com/en-us/visualstudio/ide/how-to-b...

Правда, только для 2019 и 2022. Ну раньше, наверное, чем-то кастомным пробавлялись. Но делать кучу проектов со ссылками на одни и те же исходники - бред какой-то...

#17 
Программист коренной житель14.06.22 09:10
NEW 14.06.22 09:10 
в ответ alex445 13.06.22 15:45

Я привел тебе просто один пример для чего это может понадобиться.

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


Не знаю, например ты можешь сделать адаптер для взаимодействия с базами данных - MSSQL, SQLite, Oracle, MySQL при этом ты хочешь выпускать одну сборку, которая включает все необходимое. Таким образом интерфейсы будут везде одни и теже файлы с интерфейсами и разные реализации.

#18 
alex445 коренной житель14.06.22 10:23
NEW 14.06.22 10:23 
в ответ Программист 14.06.22 09:10, Последний раз изменено 14.06.22 10:24 (alex445)

Может, пример не очень удачный? Тогда и конкретные классы должны по-разному называться? Типа MSSQLAdapter, OracleAdapter, а не просто Adapter подо все платформы, но с разным кодом? Т.е. с какой стати задачу разнесения бизнес-сущностей решать на уровне менеджмента проектов, а не менеджмента кода? Вы выносите бизнес-логику за язык программирования.


Впрочем, я могу понять, что может где-то и применяется это. Осталось понять, а привально ли применили это в конкртеном месте. А то некоторые заморачиваются архитектурой ради архитектуры.

#19 
Программист коренной житель14.06.22 10:29
NEW 14.06.22 10:29 
в ответ alex445 14.06.22 10:23

Конкретные классы можно называть по-разному. А вот интерфесы везде одни и те же. Плюс должна быть фабрика.

#20 
1 2 все