2009-11-17 9 views
9

Tengo una biblioteca de clases llamada "MyAssembly" que hace referencia internamente a.dll, b.dll de la versión 3.1.1.0; Tengo construir el proyecto que superó a MyAssembly.dll. En un sistema diferente (recuadro), he creado un proyecto de aplicación web y he mencionado MyAssembly.dll. el nuevo sistema tiene nuevas versiones de a.dll y b.dll 4.0.0; Usé la redirección de enlace en web.config como a continuación. Pero aún no puede compilar la aplicación web. dice la referencia de ensamblaje faltante a.dll, versión 3.1.1.0.Problema de redireccionamiento de enlace en .net

¿Podría cualquier persona ayudar a resolver este problema?

Gracias, Suresh

Respuesta

6

Esto debería funcionar.

<runtime> 
<dependentAssembly> 
    <assemblyIdentity name="MyAssembly" publicKeyToken="12233444"/> 
    <bindingRedirect oldVersion="3.1.1.0" newVersion="4.0.0.0"/> 
</dependentAssembly> 
</runtime> 

Otra sugerencia: Retire el espacio de nombres de la etiqueta de configuración:

En lugar de

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

tratar

<configuration> 
+0

lo hice exactamente lo mismo. Pero sin suerte. Al compilar el proyecto en ide sí mismo dando error diciendo "¿te falta Assemblyreference a.dll 3.1.1.0 – Suresh

+1

La etiqueta de configuración no contiene el atributo xmlns. No Luck – Suresh

+0

Funcionó de mi lado, gracias. Mi pregunta es ¿por qué funciona cuando el El atributo xmlns se eliminó? – csg

0

está usando el MyAssembly en su aplicación web. La redirección de enlace se usará para este conjunto y no para los conjuntos que usa MyAssembly. Compruebe el manifiesto de MyAssembly.dll, debería estar refiriéndose a las versiones 3.1.1.0 de a.dll, por lo tanto, se muestra el error del compilador. Construya MyAssembly con referencia a a.dll de la versión 4.0.0.0 y luego use MyAssembly en su aplicación web. Esto funcionará

0

Trate de esta manera:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="a.dll" 
         publicKeyToken="{put a.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="b.dll" 
         publicKeyToken="{put b.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

También, ir a las referencias de su aplicación, haga clic derecho en el A.dll y B.dll, ir a las características y comprobar si "Versión específica" se establece en False .

Espero que ayude.

19

Esto funcionó por completo para mí. NOTA: Necesita NO espacio de nombres en la etiqueta configuration. Y usted DEBE tener un espacio de nombre en su etiqueta assemblyBinding.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace --> 
<configuration> 
    <runtime> 
    <!-- important, must have this namespace --> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

hacer ambas o de lo contrario no lo leerá. Si está dando un error de que no puede cargar nada más que 2.0.0.0 en este ejemplo, entonces no está recogiendo los elementos de configuración correctamente.

Esto también solo funciona en conjuntos fuertemente nombrados.Para saber si algo se llama fuertemente ejecute el siguiente comando desde la ventana de comandos VC

abierta (menú Inicio> Todos los programas> Visual Studio> Visual Studio Tools> símbolo del sistema de Visual Studio)

A continuación, ejecute:

sn -vf "path-to-assembly.dll" 

Si devuelve que es válido, entonces tiene un nombre fuerte.

fuente: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

+0

Esto solucionó por completo un problema que tenía con una redirección de enlace que se ignoraba para un proyecto web. ¡Gracias! – Jaans

+0

TE AMO. Me salvaste por completo la cordura. Quité el espacio de nombres de la etiqueta 'configuration' y ¡solo funcionó! –

+0

¡Muchas gracias! Faltaba un espacio de nombre en el conjunto –

Cuestiones relacionadas