Esto es muy posible
Si ha definido un espacio de nombre y un nombre de tipo idénticos en diferentes ensamblajes (o en su proyecto y el ensamblado agregado), obtendrá un conflicto con cualquier código que intente utilizar uno u otro de estos tipos.
Si se asegura de tener espacios de nombres únicos, al igual que sus referencias, no tendría este problema.
Otra posibilidad tiene que ver con diferentes versiones de una dependencia: si su proyecto usa (por ejemplo) una biblioteca de registro en la versión 1.2, pero el ensamblado agregado tiene una dependencia en el mismo ensamblaje pero una versión diferente (digamos 1.3) y su proyecto o el ensamblado agregado se ha configurado / creado para usar una versión específica, obtendrá un conflicto y la compilación fallará.
Ambos problemas se pueden resolver utilizando alias de ensamblaje, como se describe aquí .
Como nadie más mencionó esto, preguntaste:
Hay una solución limpia solo para este caso, sin restricciones y sin soluciones molestas. Puede definir alises de ensamblaje para que el compilador sepa a cuáles referirse en el lugar correcto.
Echa un vistazo a http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx
fuente
Sí, esto es muy posible.
Supongamos que agregó una referencia a alguna DLL que usa la versión anterior de Lucene.Net y desea incluir la última versión.
Puede resolver ese problema utilizando alias externos: http://msdn.microsoft.com/en-us/library/ms173212.aspx
fuente
Puede colocar tantas versiones diferentes de un ensamblaje como desee en la Caché de ensamblados global, siempre que tengan un nombre seguro . Esto puede ayudarlo si desea que diferentes aplicaciones utilicen diferentes versiones de un ensamblaje, en términos de máquina. Sin embargo, el uso de diferentes versiones de un ensamblaje en UNA aplicación aún lo meterá en problemas.
¿Cuál es la razón por la que necesita ambas versiones al mismo tiempo?
fuente
Sin lugar a duda. Puede obtener el error del compilador "Referencia ambigua" cuando no se pueden distinguir dos objetos. Por lo general, puede especificar la ruta completa en el código y no causará un problema, pero si los dlls fueran completamente idénticos, no podría distinguir entre dos objetos de ninguna manera. Sya tenemos dos dlls:
System.IO que contiene la clase File
y
MyProject.IO que contiene una clase de archivo
Si tuviera algo como esto ...
... tendría una referencia ambigua, ya que no hay forma de saber de qué archivo está hablando. Esto lo solucionaría:
La única forma en que sería difícil de solucionar sería si la ruta del "Archivo" fuera idéntica en ambos ensamblajes, pero eso requeriría la situación poco probable de que dos dlls tuvieran una estructura de espacio de nombres idéntica. Por ejemplo, mi situación anterior nunca sucedería, ya que nadie va a nombrar allí el proyecto "Sistema" (con la excepción de los desarrolladores reales del marco .Net).
fuente