visual una tipo tiene studio referencia que puedo puede proyecto libreria encontraron crear componente como bibliotecas asegurese archivo agregar acceso .net visual-studio dll build-process dependencies

.net - una - no se puede agregar referencia.dll c#



¿Es posible tener referencias DLL independientes de la versión en una clase? (3)

En VisualStudio, ¿ha intentado hacer clic con el botón derecho en el ensamblaje al que se hace referencia (dll) y luego seleccionar las propiedades y establecer "requiere una versión específica" (o así)? Eso puede resolver su problema.

Andreas

Me gustaría crear una clase que compile en una sola DLL. Esta DLL agregaría funcionalidad a un producto existente.

Para hacer que esto funcione, la clase personalizada hace referencia a las DLL contenidas en el producto subyacente. Estas referencias son necesarias para compilar.

Todo funciona bien aquí y la clase personalizada se compila. Puedo colocar la DLL producida en el producto y todo funciona bien.

Sin embargo, este producto tiene varias versiones (versiones secundarias, paquetes de servicio). Me gustaría distribuir esta DLL a otros, pero estoy encontrando que la DLL debe coincidir perfectamente con la versión del producto. Si no hay una coincidencia perfecta, se produce el siguiente error:

No se pudo cargar el archivo o el ensamblaje ''Product.Web.UI, Version = 3.6.1920.2, Culture = neutral, PublicKeyToken = dfeaee0e3978ac79'' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia del ensamblaje. (Excepción de HRESULT: 0x80131040)

¿Cómo produzco una DLL que no sea exigente con la referencia de versión?


Esta es una excelente solución. Resolvió un problema similar para mí.

Compilar una versión agnóstica DLL en .NET

En caso de que el enlace muera, la clave es manejar el evento AppDomain.CurrentDomain.AssemblyResolve como se muestra a continuación. El evento se activa cada vez que falla un enlace de ensamblaje, por lo que puede resolverlo usted mismo, solucionando conflictos de versión.

using System.Reflection; static Program() { AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs e) { AssemblyName requestedName = new AssemblyName(e.Name); if (requestedName.Name == "Office11Wrapper") { // Put code here to load whatever version of the assembly you actually have return Assembly.LoadFile("Office11Wrapper.DLL"); } else { return null; } } }


Todavía no tengo una respuesta a mi pregunta, pero usaré esta respuesta para registrar las migas de pan que encontré al buscar una solución.

Encontré una pregunta un tanto relacionada en :

Compilar una versión agnóstica .DLL en .NET (¿Usando Manifiestos?)

Sin embargo, no tengo la capacidad de modificar el producto subyacente, por lo que la respuesta no funciona para mí.

Actualizado:

Le envié un correo electrónico a alguien mucho más inteligente que yo y aquí estaba la respuesta:

Cuando hace referencia a un ensamblado con nombre seguro, de forma predeterminada, Visual Studio agrega una referencia completa al ensamblado al que se hace referencia. Eso significa que incluye el nombre del conjunto, la versión exacta, la cultura y el token de clave pública. Si alguna de esta información no coincide, se lanza la excepción descrita.

Eliminar los nombres fuertes de nuestros ensamblajes simplemente no es una opción. No voy a entrar en detalles por qué, pero puedes investigar un poco en MSDN.

Por lo tanto, tiene dos opciones para solucionar el problema de cada versión de los conjuntos a los que hace referencia.

  1. Podrías hacer referencia parcial. Consulte este artículo: http://msdn.microsoft.com/en-us/library/0a7zy9z5(VS.71).aspx .
  2. Puede declarar versiones compatibles con redireccionamiento de enlaces en web.config. Consulte este artículo: http://msdn.microsoft.com/en-us/library/433ysdt1.aspx .

En general, se recomienda el segundo enfoque porque: 1. No puede usar una referencia parcial a los conjuntos en el caché de la Asamblea Global, lo que significa que su control arrojará la misma excepción si los conjuntos están en la GAC. 2. Usted declara explícitamente las versiones compatibles.