2011-08-16 16 views
5

Esto es extraño.carga dinámica funciona bien, excepto después de que el ejecutable está ILMerged

Tengo una aplicación de Windows que carga dinámicamente archivos DLL usando Reflection.Assembly.LoadFrom(dll_file_name_here).

Funciona como se esperaba, hasta que ILMerge la aplicación con otra DLL.

Así que este escenario funciona bien:

  • MyApp.exe
  • MyAppComponent.dll
  • Plugin.dll

Una vez que ILMerge MyApp.exe y MyAppComponent.dll lo que resulta en:

  • MyApp.exe
  • Plugin.dll

Calling Reflection.Assembly.LoadFrom("Plugin.dll") parece cargar con éxito, sin embargo una vez que trato de hacer cualquier cosa con él por ejemplo:

foreach (typeAsm in Reflection.Assembly.LoadFrom("Plugin.dll")) 

consigo una excepción "no puede cargar una o más de las tipos solicitados recuperar la propiedad excepciones cargador para más informtion".

Lo frustrante es que no puedo depurarlo, debido a la depuración de fusión pre funciona perfectamente!

Ayuda?

+0

Debug it con fuslogvw.exe. escenario de error es plugin.dll que tiene una dependencia en el desaparecido myappcomponent.dll –

Respuesta

2

Mi conjetura es que Plugin.dll hace referencia a MyApp.exe o MyAppComponent.dll, que no son compatibles (MyApp.exe) o no están en absoluto (MyApp.dll) después de ILMerging.

Si ese es el caso, no debe ILMerge ellos.

+0

Gracias. Esto me ayudó a encontrar una solución alternativa. Lo que hice fue 1. Quite la referencia del complemento al proyecto MyApp. 2. Compila e ILMerge MyApp en un solo exe. 3. Luego haz que el plugin haga referencia al ejecutable. Funcionó una delicia. – Steve

+0

Por lo que sea, su solución provoca un acoplamiento muy ajustado entre el complemento y el (MyMessage posterior) MyApp.exe. Este es probablemente un mal diseño, por varias razones. Tener el complemento y la referencia de la aplicación en una biblioteca común que reside en su propia DLL es un mejor patrón, ya que separa la interfaz del complemento de la implementación de la aplicación, y viceversa. –

Cuestiones relacionadas