Pregunta

Tengo un escenario en el que tengo varias versiones del mismo ensamblaje que necesito almacenar en las carpetas privadas de la aplicación, en una estructura como esta:

.\My.dll          // latest version, say 1.1.3.0
.\v1.1.1\My.dll   // version 1.1.1.0
.\v1.1.2\My.dll   // version 1.1.2.0

Mi problema es que el tiempo de ejecución .Net, cuando se le solicita una de las versiones anteriores, siempre encuentra la última versión y luego falla debido a la falta de coincidencia del número de compilación antes de intentar buscar una mejor coincidencia.

Los ensamblados tienen un nombre seguro y estoy usando esta configuración en mi app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="My" 
                publicKeyToken="xxxxxxxx" culture="netural" />

                <bindingRedirect oldVersion="1.0.0.0-1.1.1.0" 
                    newVersion="1.1.1.0" />
                <bindingRedirect oldVersion="1.1.3.0-1.1.65535.65535" 
                    newVersion="1.1.3.0" />

                <codeBase version="1.1.1.0" href="v1.1.1\My.dll" />
                <codeBase version="1.1.2.0" href="v1.1.2\My.dll" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Espero que haya algo que me haya perdido aquí. Sé que esto se puede resolver en código escuchando el AppDomain. Evento AssemblyResolve pero me encantaría ver una solución de configuración pura.

Actualización: Así que encontré el error, que es, como asumió Kent, un error tipográfico. culture = " netural " debe ser culture = " neutral " . Dicho esto, sin el error tipográfico, la resolución funciona muy bien cuando se usan elementos codeBase que apuntan a cada versión. El elemento de sondeo no parece funcionar en este escenario.

¿Fue útil?

Solución

Sin ver la solución completa, solo puedo suponer que tienes un error tipográfico en alguna parte. Acabo de probar esto por mí mismo y, con la ayuda de fuslogvw , pude hacerlo funcionar.

Tengo tres versiones del ensamblado y la aplicación que consume hace referencia a una versión anterior a la del directorio de salida. El CLR encuentra las redirecciones y la entrada codeBase y carga la versión correcta (anterior).

Puedo enviarle mi solución por correo electrónico si me proporciona una dirección de correo electrónico.

Kent

Otros consejos

¿Puedes usar una ruta de sonda? usamos esto para forzar a los no controlados (p. ej., resolvers de terceros, como MSTest) a buscar ensamblajes donde los necesitamos.

<?xml version ="1.0"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="v1.1.1;v1.1.2;"/>
        </assemblyBinding>
    </runtime>
</configuration>

Consulte aquí para obtener más información

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top