2011-05-25 39 views
7

¿La combinación de ensamblados cambia el alcance de la palabra clave interna?Fusionar conjuntos y usar la palabra clave interna

Estoy bastante seguro de que no tendría un efecto (o al menos uno que importaría) ya que cualquiera que haga referencia al ensamblado final no podrá acceder a las clases internas de todos modos.

Esta podría ser una pregunta hipotética sin valor real en el mundo, pero tenía curiosidad, no obstante.

Editar: Quiero decir con ILMerge, no combinando el código fuente en un solo conjunto armable.

+0

¿Qué quiere decir mediante la fusión de las asambleas? ¿Te refieres a (IlMerge) (http://www.microsoft.com/downloads/en/details.aspx?familyid=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en)? Técnicamente, no puedes. Puedes fusionarte Módulos de ensamblaje en una sola imagen PE32 administrada. O tal vez quiere decir en el nivel de código fuente? – sehe

+0

@sehe pregunta actualizada. Quiero decir con ILMerge, no el código fuente. –

Respuesta

10

Sí, una vez que los conjuntos se fusionan, obtienen acceso a las clases internas de los demás. Esto es aprovechado específicamente por algunos ofuscadores para hacer llamadas públicas entre asambleas en llamadas internas y luego ofuscarlas haciéndolo más seguro. Referencia: SmartAssembly

En una nota lateral, utilizando ILMerge, puede utilizar el modificador de línea de comandos/internalize que hará que todas las clases públicas en ensambles que no sean el ensamblado primario interno, que elimina las interfaces públicas del ojo del usuario final aún los ensambles funcionan normalmente.

+2

+1 muy buena respuesta – sehe

3

Suponiendo que no se está ejecutando con plena confianza, los tipos que se fusionaron en el ensamblado final con los tipos internos ahora podrían tener acceso a los miembros públicos de los tipos internos.

ensamblaje Así dada A:

public class MyClassA { ... } 

y montaje B:

internal class MyClassB { ... } 

MyClassA puede no tener permiso para reflejar los miembros públicos de MyClassB. Si se fusionaron en el mismo conjunto, entonces MyClassA puede obtener dicho permiso.

Cuestiones relacionadas