referencia puede microsoft manifiesto icsharpcode ensamblado definición con coincide cargar archivo .net visual-studio dependencies installer .net-assembly

.net - manifiesto - no se puede cargar el archivo o ensamblado microsoft web infrastructure



Dependencias de montaje cambian después de la instalación (2)

Ok, lo descubrí. Primero, facepalm

El ensamblado agregado a través de NuGet tiene una dependencia de versión específica en Castle.Core 3.2.0. Sin embargo, debido a que ese ensamblado aún puede funcionar con Castle.Core 3.2.0-4.0.0, se agregó un redireccionamiento de ensamblaje a App.config que indica al cargador de ensamblaje que los ensamblados que requieren una versión en ese rango deberían intentar cargar Castle .Core 3.3.0, que es la versión que se empaqueta en el instalador de mi aplicación. No me di cuenta de que no había incluido el archivo de configuración en mi instalador, por lo que Visual Studio cargó la configuración sin problemas, mientras que a la aplicación instalada le faltaba ese archivo en el directorio de la aplicación.

Tengo una aplicación .NET que parece tener algunas de sus versiones de dependencia que cambian entre la depuración y la ejecución como una aplicación de lanzamiento instalada. Solo me concentraré en el montaje Castle.Core para obtener más información, pero el mismo problema ocurre con otros dos también. Un paquete NuGet que estoy utilizando requiere Castle.Core como dependencia (todos los casos de mi problema están relacionados con ensamblajes que se originan en NuGet, en caso de que importe).

En Visual Studio, cuando instalo el paquete NuGet con la dependencia Castle.Core, todo funciona perfectamente, tanto en las configuraciones de Depuración como de Liberación. Puedo ver que la referencia del proyecto Castle.Core está haciendo referencia a la versión 3.3.0.0. Sin embargo, cuando empaqueté todo lo generado por la configuración de Release utilizando InstallShield e instalé la aplicación (con todos los ensamblados viviendo en el mismo directorio de programa), recibo este error de tiempo de ejecución:

No se pudo cargar el archivo o ensamblado ''Castle.Core, Version = 3.2.0.0, Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040)

El paquete NuGet enumera su dependencia en Castle.Core como (≥3.2.0.0 && <4.0.0.0). Ambos 3.2.0.0 y 3.3.0.0 satisfacen esas condiciones.

Si degradé Castle.Core a 3.2.0.0 manualmente, la referencia de mi proyecto muestra que efectivamente se ha degradado. Pero cuando ejecuto el proyecto en Visual Studio, obtengo:

No se pudo cargar el archivo o ensamblado ''Castle.Core, Version = 3.3.0.0, Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040)

con una excepción interna de:

No se pudo cargar el archivo o ensamblado ''Castle.Core, Version = 3.2.0.0, Culture = neutral, PublicKeyToken = 407dd0808d44fbdc'' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040)

Sin embargo, si luego lo paquete en un instalador y lo ejecuta como una aplicación instalada, funciona.

Para mí, parece que el acto de empaquetar los ensamblajes en un instalador hace que cambien las versiones de dependencia. No puedo imaginar que sea el caso, pero tengo problemas para encontrar una mejor explicación.

¿Alguien puede explicar lo que está sucediendo aquí y cómo puedo solucionarlo?


Tuve el mismo problema, acabo de degradar a la versión Moq menos disponible y funcionó.