2010-03-01 3 views

Répondre

78

Permettez-moi d'énumérer les avantages de la forte désignez votre premier ensemble:

  1. Fort nommant votre assemblée vous permet d'inclure votre ensemble dans le Global Assembly Cache (GAC). Ainsi, il vous permet de partager entre plusieurs applications. Une dénomination forte garantit un nom unique pour cet assemblage. Ainsi, personne d'autre ne peut utiliser le même nom d'assembly.

  2. Le nom fort protège la lignée de version d'un assemblage. Un nom fort peut garantir que personne n'est capable de produire une version ultérieure de votre assembly. Les utilisateurs de l'application sont assurés qu'une version de l'assembly qu'ils chargent provient du même éditeur qui a créé la version avec laquelle l'application a été créée.

  3. Les assemblys nommés forts sont signés avec une signature numérique. Cela protège l'ensemble de la modification. Toute falsification entraîne l'échec du processus de vérification qui se produit au moment du chargement de l'assembly. Une exception est générée et l'assembly n'est pas chargé.

Plus sur le nommage fort de Microsoft est dans Strong-Named Assemblies (MSDN).

+0

Merci +1 pour réponse rapide – developer

+0

Etes-vous sûr sur le point 4? Je pense que ce comportement a peut-être changé récemment. J'ai essayé de faire échouer le chargement d'un assembly fortement nommé en le modifiant, mais il s'est chargé sans incident. – Jens

+0

@Jens: Avez-vous essayé manuellement de vérifier le nom fort? –

6

Quelles sont les choses qui ne peuvent pas être faites avec un assemblage normal?

Depuis toutes les discussions qui ont commencé avec la montée de Nuget ont suggéré de se débarrasser complètement des assemblages solides nommé ma compagnie essayé et suis tombé sur un changement significatif du comportement en matière de paramètres d'application:

Si vous utilisez l'application automatique ou les paramètres d'application étendue par l'utilisateur fournis par VisualStudio (héritant System.Configuration.ApplicationSettingsBase) puis un EXE nommé fort va créer exactement 1 répertoire à l'intérieur% LOCALAPPDATA% nommé par exemple "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif" peu importe où se trouve l'EXE .

Mais sans le nom fort de l'emplacement (= chemin) du fichier EXE sera utilisé pour créer une valeur de hachage qui diffère déjà entre la construction et DEBUG RELEASE, ce qui crée de nombreux répertoires à l'intérieur% LOCALAPPDATA% nommés comme « YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf ». Cela le rend inutilisable pour les déploiements ClickOnce où le répertoire d'installation est modifié à chaque mise à jour.

0

Juste un exemple: je voudrais donner une réponse faisant plus d'emphase dans le security. Dans le cas où nous créons des assemblages avec un code source que nous ne voulons pas réutiliser pour un tiers mais que nous voulons qu'il soit testable, nous pouvons fortement signer un assemblage et rendre les internes visibles uniquement pour les assemblages avec le même signature.

3

Je voudrais ajouter que sans un nom fort, vous ne pouvez pas utiliser les redirections de liaison dans les fichiers de configuration.

Cela ne fonctionnera pas:

<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> 

Vous devez avoir un jeton de clé publique

<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

Les redirections de liaison ne sont pas nécessaires si vous n'avez pas de nom fort. – trampster

Questions connexes