272 votes

Pourquoi est-ce que je reçois le message "L'assemblage '*.dll' doit être signé de manière forte afin d'être marqué comme un prérequis" ?

J'essaie de compiler mon addin Excel en utilisant C# 4.0, et j'ai commencé à rencontrer ce problème lors de la construction de mon projet dans Visual Studio. Il est important de vous dire que je n'ai jamais eu ce problème auparavant. Quelle pourrait être la cause de ce problème ?

72 votes

En guise d'essai rapide, effacez les deux bin y obj de votre projet, et recompilez le projet. Parfois, cela fonctionne.

0 votes

Vous signez l'assemblage ?

3 votes

@Jason, Nettoyer le projet et le reconstruire a fonctionné pour moi. J'avais récemment signé les assemblages et le projet se construisait, mais ne se publiait pas.

270voto

CharleZ Points 921

Lorsque j'ai eu ce problème, je l'ai résolu en désactivant l'option " Activer les paramètres de sécurité de ClickOnce ".

Menu : Projet | 'Nom du projet' Propriétés... | Onglet Sécurité | Case à cocher 'Activer les paramètres de sécurité de ClickOnce'.

2 votes

Cela n'a pas fonctionné pour moi dans VS2012 (la case à cocher est recochée automatiquement pendant la publication). J'ai utilisé cette réponse à la place, car la DLL n'était nécessaire que pour le processus de construction. stackoverflow.com/a/8123074/17713

3 votes

Lorsque vous utilisez ClickOnce, cette case à cocher est automatiquement sélectionnée chaque fois que l'application est publiée avec l'assistant de publication. Voir msdn.microsoft.com/fr/us/library/1sfbfyk0.aspx pour plus d'informations.

8 votes

J'ai MSVS 2015 et je ne vois pas l'onglet sécurité dans les propriétés du projet.

243voto

Kit Points 4632

Je pense que vous ne travaillez pas avec des assemblages fortement nommés. J'ai eu cette erreur lorsque deux projets font référence à des versions légèrement différentes du même assemblage et qu'un projet plus dépendant fait référence à ces projets. La solution dans mon cas a été de supprimer les informations de clé et de version du nom de l'assemblage dans les fichiers .csproj (cela n'avait pas d'importance de toute façon), puis de faire une construction propre.

Les changements entre les différentes versions de l'assemblage étaient compatibles avec les parties de la solution qui y faisaient référence. Si ce n'est pas le cas pour vous, vous devrez peut-être faire un peu plus d'efforts pour résoudre le problème.

NuGet

Avec NuGet, il est facile de se retrouver dans cette situation si :

  1. Vous installez un paquet dans un projet de votre solution.
  2. Une nouvelle version de ce paquet est déployée vers la source du paquet.
  3. Vous l'installez dans un autre projet de la même solution.

Il en résulte que deux projets de votre solution font référence à des versions différentes des assemblages de ce paquet. Si l'un d'eux fait référence à l'autre et est une application ClickOnce, vous verrez ce problème.

Pour résoudre ce problème, lancez la commande update-package [package name] dans la console du gestionnaire de paquets Nuget pour tout remettre à niveau, et le problème disparaît.

Vous devriez gérer les paquets NuGet au niveau de la solution plutôt qu'au niveau du projet, sauf s'il y a une raison impérative de ne pas le faire. La gestion des paquets au niveau de la solution évite le risque de versions multiples des dépendances. Lors de l'utilisation de l'interface de gestion, si l'option Consolidé L'onglet montre qu'un ou plusieurs paquets ont plusieurs versions, envisagez de les consolider en une seule.

7 votes

Voici quelques informations supplémentaires : social.msdn.microsoft.com/Forums/fr/csharplanguage/thread/ . De plus, le nettoyage bin y obj. et (si vous en avez le contrôle) en fixant la version de l'assemblage à la même valeur (par exemple en laissant le numéro de build à zéro).

3 votes

J'ai ajouté un peu à la fin de votre réponse pour refléter ma propre expérience aujourd'hui avec NuGet et cette même erreur. J'espère que cela aidera quelqu'un un jour (peut-être même moi-même dans quelques mois !).

2 votes

Cette erreur ne cesse d'apparaître et le fait de supprimer le nom de l'assemblage du fichier .csproj, puis de le nettoyer, l'a toujours résolue. Merci !

70voto

Otiel Points 6224

Voir ceci réponse .

Allez sur la page de publication et cliquez sur "Application Files". De là, vous devriez voir une liste de vos DLL. Assurez-vous que le statut de publication de celles qui vous posent problème est marqué comme "Include" plutôt que "Prerequisite".

2 votes

Le projet d'addin exel n'a pas de bouton "Application Files". stackoverflow.com/questions/6378801/

0 votes

@SergeyKucher : Je ne le savais pas. Merci pour la mise à jour. Comme votre question ne précise pas qu'il s'agit d'un addin Excel, je pense que ma réponse est toujours valable ici (j'ai eu le même message d'erreur sur un winforms et l'a résolu de cette façon).

0 votes

J'ai un projet winforms qui s'est bien construit jusqu'à ce que j'utilise l'assistant de publication, après quoi j'ai eu les erreurs du PO. Le changement du statut de publication a réglé le problème. Merci

23voto

daniel Points 81

J'ai eu ce problème. Il s'est produit parce que j'avais beaucoup de projets qui pointaient vers le même assemblage mais de versions différentes. Je l'ai résolu en sélectionnant la même version pour tous les projets de ma solution.

13voto

Sogger Points 2761

Si vous avez modifié votre version d'assemblage ou copié une version différente de la bibliothèque gérée mentionnée dans l'erreur, il se peut que les fichiers compilés précédemment fassent référence à la mauvaise version. Un 'Rebuild All' (ou la suppression de vos dossiers 'bin' et 'obj' comme mentionné dans un commentaire précédent) devrait résoudre ce cas.

0 votes

Un "Rebuild All" effectue d'abord un nettoyage, et est équivalent à "clean" puis "build". Il est bon de noter que parfois, lorsque des fichiers ont été copiés manuellement ou copiés avec des horodatages différents, la fonctionnalité 'clean'/'rebuild' ne résout pas le problème et il est nécessaire de supprimer manuellement les dossiers 'bin' et 'obj'.

0 votes

Pour ce problème lié à Excel, la suppression des dossiers bin/obj a fonctionné pour moi, les autres approches n'ont pas fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X