2010-08-08 12 views
21

Tengo el siguiente código dentro de un Formulario y estoy intentando encontrar una forma de cargar un ensamblado de proyecto al que hace referencia el formulario llamado DataObjects. Usando el siguiente código, solo consigo seis ensamblajes listados. Mirando las referencias para el proyecto en el que está el formulario, hay trece referencias de ensamblaje. ¿Que esta mal aquí?GetReferencedAssemblies no devuelve todos los ensamblados

private void ListReferencedAssemblies() 
{ 
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); 
    foreach (var assembly in assemblies) 
    { 
     referencesListBox.Items.Add(assembly.Name); 
    } 
} 

Respuesta

28

¿Podría verificar el manifiesto de la asamblea para ver lo que se menciona aquí?

El compilador de C# tiende a eliminar ensamblajes referenciados del manifiesto si no se usan. Por lo tanto, si no se refiere a ningún tipo del ensamble B o se refiere solo a las constantes del ensamble B (que están enmarcadas por el compilador) entonces no tendrá estas referencias.

+6

¿Hay alguna manera de forzar que se cargue el ensamblaje 'no utilizado'? – ProfK

+0

Assembly.Load() si conoce el lugar para cargar en el dominio actual o escribe algún código ficticio para referirse a tipos de ensamblajes 'no utilizados'. –

+2

Te creo (estoy llegando al mismo problema en este momento), pero ¿tienes una fuente? – edhedges

7

El compilador no incluirá las referencias de ensamblaje en el ensamblaje de salida que en realidad no se usan en el código.

Solo los conjuntos que se utilizan desde el código se referenciarán en el conjunto de salida.

+0

"que no se utilizan realmente en el código" - Creo que esto debe escribirse de manera diferente. Cuando algo que llamo depende de la presencia de tipos descubiertos a través de la reflexión (en mi caso, a través de MEF), esos tipos * son * usados. Es decir, se usarían si el compilador no hubiera eliminado la referencia y hubiera bloqueado la aplicación. –

Cuestiones relacionadas