2010-03-01 35 views

Respuesta

78

Permítanme enumerar los beneficios de la fuerte nombramiento de su primer conjunto:

  1. fuerte nombramiento de su montaje le permite incluir su conjunto en el Global Assembly Cache (GAC). Por lo tanto, te permite compartirlo entre múltiples aplicaciones.

  2. Strong naming garantiza un nombre único para ese conjunto. Por lo tanto, nadie más puede usar el mismo nombre de conjunto.

  3. El nombre fuerte protege el linaje de versión de un conjunto. Un nombre seguro puede garantizar que nadie pueda producir una versión posterior de su ensamblaje. Los usuarios de la aplicación se aseguran de que una versión del ensamblaje que están cargando proviene del mismo editor que creó la versión con la que se creó la aplicación.

  4. Los ensamblajes con nombres fuertes están firmados con una firma digital. Esto protege el conjunto de la modificación. Cualquier alteración hace que el proceso de verificación que ocurre en el momento de carga del ensamblaje falle. Se genera una excepción y el ensamblado no se carga.

Más sobre fuerte nombramiento de Microsoft está en Strong-Named Assemblies (MSDN).

+0

Gracias 1 respuesta rápida para – developer

+0

¿Seguro sobre el tema 4? Creo que tal vez este comportamiento ha cambiado recientemente. Intenté que fallara la carga de un ensamblado fuertemente nombrado al modificarlo, pero se cargó sin incidentes. – Jens

+0

@Jens: ¿Intentó y verificó manualmente el nombre correcto? –

6

¿Cuáles son las cosas que no se pueden hacer con un ensamblaje normal?

Puesto que todas las discusiones que se inició con la aparición de Nuget sugirieron a deshacerse por completo de fuertes montajes nombre de mi empresa trató de eso y se encontró con un cambio significativo del comportamiento cuando se trata de la configuración de la aplicación:

Si utiliza la aplicación automática o la configuración de la aplicación de ámbito de usuario proporcionada por VisualStudio (hereda System.Configuration.ApplicationSettingsBase), entonces un fuerte EXE llamado creará exactamente 1 directorio dentro de% LOCALAPPDATA% nombrado, por ejemplo, "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif", sin importar dónde se encuentre el EXE. .

Pero sin el nombre seguro la ubicación (= ruta) del archivo EXE se utilizará para crear un valor hash que ya se diferencia entre la depuración y versión de lanzamiento, creando muchos directorios dentro% LOCALAPPDATA% nombradas como "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf". Esto lo hace inutilizable para las implementaciones de ClickOnce donde el directorio de instalación cambia con cada actualización.

0

Solo un ejemplo: me gustaría dar una respuesta haciendo más énfasis en el security. En el caso de que creamos ensamblajes con un código fuente que no queremos que se vuelva a utilizar para un tercero, pero queremos que se pueda probar, podemos firmar firmemente un ensamblaje y hacer que las partes internas sean visibles solo para aquellos ensamblajes con el misma firma.

3

Me gustaría agregar que sin un nombre seguro no puede usar redireccionamientos de enlace en los archivos de configuración.

Esto no funcionará:

<dependentAssembly> 
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 

Es necesario tener un token de clave pública

<dependentAssembly> 
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
+2

Los redireccionamientos de enlace no son necesarios si no tiene un nombre seguro. – trampster

Cuestiones relacionadas