Это очень возможно.
Если вы определили идентичное пространство имен и имя типа в разных сборках (или в вашем проекте и добавленной сборке), вы получите конфликт с любым кодом, который пытается использовать тот или иной из этих типов.
Если вы уверены, что у вас есть уникальные пространства имен, как и ваши ссылки, у вас не будет этой проблемы.
Другая возможность связана с различными версиями зависимости - если ваш проект использует (например) библиотеку журналов версии 1.2, но добавленная сборка имеет зависимость от той же сборки, но с другой версией (скажем, 1.3) и любым вашим проектом. или добавленная сборка была сконфигурирована / построена для использования определенной версии, вы получите конфликт, и сборка не удастся.
Обе эти проблемы могут быть решены с помощью псевдонимов сборки, как описано здесь .
Поскольку никто не упомянул об этом, вы спросили:
Для этого случая есть чистое решение, без ограничений и без раздражающих обходных путей. Вы можете определить сборочные псевдонимы, чтобы компилятор знал, на какие из них ссылаться в нужном месте.
Посмотрите на http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx
источник
Да, это очень возможно.
Допустим, вы добавили ссылку на некоторую DLL, которая использует старую версию Lucene.Net, и вы хотите включить последнюю версию.
Вы можете решить эту проблему, используя внешние псевдонимы: http://msdn.microsoft.com/en-us/library/ms173212.aspx
источник
Вы можете поместить столько разных версий сборки, сколько хотите, в глобальный кэш сборок при условии, что они имеют строгое имя. Это может помочь вам, если вы хотите, чтобы разные приложения использовали разные версии сборки машинным способом. Однако использование разных версий сборки в ОДНОМ приложении по-прежнему вызовет проблемы.
По какой причине вам нужны обе версии одновременно?
источник
Точно. Вы можете получить ошибку компилятора «Неоднозначная ссылка», когда два объекта невозможно различить. Как правило, вы можете указать полный путь в коде, и это не вызовет проблемы, но если dll были полностью идентичны, то вы не сможете различить два объекта в любом случае. Ся у нас есть две dll:
System.IO, который содержит класс File
а также
MyProject.IO, который содержит класс File
Если бы у вас было что-то подобное ...
... у вас была бы неоднозначная ссылка, так как невозможно определить, о каком файле вы говорите. Это исправит это:
Единственный способ, который было бы трудно исправить, состоял бы в том, что бы путь «File» был идентичен в обеих сборках, но это потребовало бы маловероятной ситуации, когда два dll имели одинаковую структуру пространства имен. Например, моя описанная выше ситуация никогда бы не произошла, поскольку никто не будет называть там проект «Система» (за исключением реальных разработчиков .Net Framework).
источник