web-dev-qa-db-fra.com

Ajout d'une référence d'assembly dans web.config

J'ai quelques questions générales sur web.config et comment cela fonctionne concernant la référence de l'assembly. J'ai joué avec le nouveau moteur de visualisation Razor et j'ai eu du mal à le faire fonctionner.

Mon problème a commencé avec un général

Le nom de type ou d'espace de noms 'XXXXX' n'existe pas dans l'espace de noms 'XXXXX' (vous manque une référence d'assembly?)

Maintenant, je pensais que c'était juste une simple référence d'ajout au projet et je serais sur mon chemin. Mais même après avoir ajouté une référence à l'Assemblée manquante, mon projet a continué de se casser.

J'ai trouvé la solution et j'ai dû ajouter une référence d'assembly dans le web.config. Une fois que j'ai fait cela, tout a bien fonctionné.

First, je veux comprendre pourquoi il a fallu ajouter une référence à web.config pour résoudre ce problème. Pourquoi une référence de projet n'était-elle pas juste assez bonne?

Second, quand il s'agit d'ajouter des références dans web.config, je voudrais comprendre la syntaxe. Quand je vois un balisage comme celui-ci

<add Assembly="System.Web.WebPages" />

il me semble très clair que j'ajoute un assembly nommé System.Web.WebPages. Mais la syntaxe complète de mon web.config est

<add Assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

La version semble explicite, mais à quoi sert la culture et PublicKeyToken? Sont-ils obligatoires? Que se passe-t-il si je ne connais aucun d'eux, puis-je simplement mettre quelque chose?

27
Matt

Répondre à votre première question:

Il y a une autre SO question ici avec une réponse utile:

Quelle est la différence entre l'élément assemblys web.config et l'élément Reference du fichier projet

Il s'agit essentiellement de différences entre les projets Web et les projets non Web dans Visual Studio (si je comprends bien).

Répondre à votre deuxième question:

Cela a pris un peu de fouille, mais c'est parti:

Culture - la plupart des assemblys doivent être neutres vis-à-vis de la culture (en supposant que cela est défini dans l'application). Cependant, si vous avez des assemblys sensibles à la culture, c'est ici que vous spécifiez la culture de l'assembly.

PublicKeyToken - il s'agit de la clé publique de la paire de clés publique/privée qui a été utilisée pour signer l'assembly. Cela permet à .NET de vérifier que l'assembly qu'il charge est le bon.

Plus d'informations utiles ici:

http://en.wikipedia.org/wiki/.NET_Assembly

8
Sam Huggill

Tout le monde semble donner le "tour de passe-passe" avec cette réponse. C'est simple:

<configuration>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
            <assemblies>
                <add Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
            </assemblies>
        </compilation>
    </system.web>
</configuration>
3
user2074102

Une vieille question, déjà répondue, mais je suis tombée dessus et j'ai voulu ajouter:

L'importance d'un jeton de clé publique est qu'il est absolument nécessaire pour un assembly fortement nommé. En fait, c'est ainsi que vous obtenez un PKT: signez l'assembly (générez une clé de nom fort). Et vous ne pouvez pas stocker un assemblage dans le GAC sans le signer.

Il ne s'agit donc pas seulement d'identifier l'assembly ... c'est un moyen cryptographique pour .NET de valider la signature d'un assembly et de s'assurer qu'il n'a pas été falsifié.

3
James King