2010-08-07 6 views
13

J'ai deux projets A et B. Le projet A utilise le type X dans le projet B, donc j'ai une référence à B ajouté dans A. Tout a bien fonctionné.Type C# défini dans un assemblage qui n'est pas référencé

J'ai signé le projet B en utilisant un fichier de clé nommé fort. Tout est encore bien construit.

Puis j'ai décidé de changer le fichier clé fort pour B. J'ai reconstruit le projet B ok. Lorsque j'essaie de construire le projet AI recevoir l'erreur "Erreur 1 Le type X est défini dans un assembly qui n'est pas référencé Vous devez ajouter une référence à l'assembly B, Version = 1.0.0.0, Culture = Neutre, PublicKeyToken = 95b41b0d6571627b '. "

J'ai donc supprimé la référence dans le projet A et l'ai réinsérée, sans joie. Je peux dbl cliquer sur la référence du projet B dans le projet A, ouvrir le navigateur d'objet et voir le type X là-bas ok. J'ai aussi complètement qualifié les objets de type X en A et l'intellisense les a bien récupérés mais ça ne se construit toujours pas.

Je pensais que changer le fichier clé que je pourrais avoir besoin pour la révision, donc j'ai changé la version de l'assembly B en 2.0.0.0 mais A se plaint encore qu'il a besoin de la version 1.0.0.0. En regardant les propriétés de la référence B dans A, il pointe définitivement vers la version correcte et en fait il apparaît comme 2.0.0.0

Je pourrais vivre avec l'utilisation du fichier clé existant mais je voudrais comprendre où je vais mal si possible.

+1

Est-ce que B est signé en différé? –

+0

Salut Merlyn, non B n'est pas signé avec délai – CSharpHolder

+2

Essayez de créer un tout nouveau projet et d'ajouter une référence au projet B. Cela vous dira au moins si quelque chose ne va pas avec Project A ou Project B. –

Répondre

0

Vous pouvez essayer de modifier le fichier de projet du projet A (projectA.csproj). Pour ce faire, à travers Visual Studio, cliquez avec le bouton droit de la souris sur le projet -> décharger le projet, puis sur le projet déchargé, cliquez avec le bouton droit de la souris -> éditer le fichier. Rechercher la référence au projet B là-bas, et essayer de corriger au besoin

+0

J'ai regardé là-bas mais la référence avait l'air ok. Je suis descendu sur la route de ne pas tout signer, de tout reconstruire, puis d'appliquer le nouveau fichier de clés. – CSharpHolder

4

D'après ce que vous avez dit dans les commentaires, je dirais que c'est certainement quelque chose avec le projet A.

Peut-être que ces mesures aideront fixer:

  1. supprimer la référence au projet B et sauver
  2. Crack ouvrir le fichier .csproj avec bloc-notes ou quelque chose
  3. Rechercher toutes les références à projet B là-dedans (peut-être un noeud de hintpath) et supprimer le signe de tête e.
  4. Si le projet A se trouve être un projet ASP.NET, regardez dans votre web.config ou vos en-têtes de page ASPX pour toute référence à un projet de B.

Une fois que vous supprimez toutes les références au projet, recharger la projet comme goulot d'étranglement suggéré et voir si cela le fixe pour vous.

1

Désolé pour la réponse tardive, mais cela m'a aidé:

(En supposant que vous avez la plate-forme de solution AnyCPU actuellement)

  • plate-forme de solution de commutateur pour x86.
  • compilez
  • interrupteur
  • recompiler.
+0

Pourquoi downvoting? Cette façon m'aide de temps en temps. –

+1

Peut-être parce que la solution ressemble à un kludge qui ne résout pas vraiment le problème sous-jacent? –

+0

Le 'problème sous-jacent' se situe probablement dans le code source de VS. Il ne peut donc pas être corrigé par nous. –

0

si x inherites A vous devez refrence en B

0

Ce qui a fonctionné pour moi était de supprimer la référence au projet, puis ajoutez-le à nouveau. Un nouveau message d'erreur est apparu disant que j'avais besoin d'une référence à une troisième bibliothèque qui manquait, donc le message original était un peu trompeur!

0

Pour aider les gens à venir ici de Google, Merlyn's comment demander à propos de retard-signé a été la réponse pour moi. J'obtenais cette erreur en référence à un assembly A signé avec délai qui faisait référence à un type X défini dans l'assembly B. J'ai obtenu l'erreur que B n'était pas référencé (et je faisais déjà référence à la version signée de B).

Le correctif était de trouver et de référencer la version signée de A.

Questions connexes