2009-02-18 4 views
3

J'utilise Visual Studio 2005, .NET 2.0réussie Visual Studio C# build ne crée pas l'assemblage

Je ne suis pas vraiment encore sûr dans quelles circonstances il arrive, mais voici le scénario: J'ai une solution une structure de projet comme celle-ci: un projet de bibliothèque Foo, un projet de bibliothèque Bar faisant référence à Foo, et un projet de bibliothèque Quux qui fait référence à Foo et Bar. La compilation échoue avec le message d'erreur "Impossible de trouver le fichier de métadonnées 'Foo.dll'" dans Bar, et "Impossible de trouver le fichier de métadonnées 'Foo.dll" et "Fichier de métadonnées' Bar.dll ' ne pas être trouvé "de Quux.

En cherchant dans mon répertoire cible (j'ai un répertoire cible combiné pour les 3 projets), il est vide, donc aucun projet n'est compilé. Maintenant, je peux obtenir que Bar et Quux échouent s'il n'y a pas de sortie de Foo. Le problème est: Pourquoi Foo échoue-t-elle silencieusement? Il n'y a pas d'erreur, et construire Foo au lieu de la solution entière fonctionne bien. La chose «drôle» est, après avoir simplement appuyé sur le bouton de construction à nouveau, le fichier Foo.dll apparaît, Bar ne se plaint plus, mais ne produit pas de fichier de sortie non plus, et Quux se plaint de Bar.dll manquant. En appuyant à nouveau sur le bouton, le Bar.dll apparaît, il n'y a plus d'erreurs mais pas de Quux.dll. Seulement après avoir appuyé sur le bouton encore une fois, le Quux.dll apparaît, encore une fois sans erreurs.

Les dépendances de projet sont toutes définies correctement, l'ordre de construction de la solution indique exactement la bonne chose.

J'ai même essayé de créer une nouvelle solution et de nouveaux fichiers de projet, puis d'y ajouter à nouveau les sources. Pas de joie non plus. La même chose arrive.

Je suis complètement perplexe. Est-ce que quelqu'un sait un moyen de sortir de ce gâchis?

+0

Je vous recommande toujours d'avoir Visual Studio 2008 et le développement de la cible 2.0 en dépit de la position notoire des gens envers ma réponse. VS2005 a des bugs VS2008 non. Il est probable que la simple réinstallation permettra de résoudre ce problème. –

Répondre

0

Le problème est l'ordre de construction. Si un projet dépend d'un autre, ce second projet doit être construit en premier. Utilisez les dépendances de construction dans les propriétés de la solution pour surmonter cela.

+0

J'ai déjà écrit: "Les dépendances du projet sont toutes correctement définies, l'ordre de construction de la solution dit exactement la bonne chose." –

+0

Est-ce qu'ils construisent vraiment dans cet ordre (au moins essayer)? – sharptooth

+0

Oui. Foo, puis Bar, puis Quux. Foo dit qu'il a compilé, Bar et Quux échouent en raison de Foo manquant. Et il n'y a pas de Foo dans le répertoire cible. –

0

Vérifiez que vous construisez l'ordre de sorte que tout semble juste là .. Essayez d'exécuter une solution propre et de construire à nouveau est-ce quand cela arrive?

4

Vous devez avoir un répertoire de sortie distinct pour chaque projet. Chaque fois qu'un projet est généré, il efface le répertoire de sortie, de sorte qu'il ne trouvera aucune dépendance sur le suivant.

N'ayez pas peur de perdre des DLL, elles seront copiées dans chaque répertoire bin où elles sont nécessaires.

1

Je pense qu'une solution à votre problème pourrait être d'utiliser des événements post-construction qui supprime la version précédente de vos DLL et copie les nouveaux dans votre répertoire cible combiné. Lorsque vous configurez les trois projets de cette façon, vous devez compiler chaque projet dans son dossier bin correspondant et dans un répertoire cible combiné. Il y a une deuxième chose à faire si vous décidez de travailler avec ceci, configurer pour chaque projet dans votre solution un chemin de référence pointant vers le répertoire cible combiné. L'ordre de compilation doit toujours exister. De cette façon, chaque DLL de projet sera trouvée dans le répertoire cible combiné, chaque fois que vous compilez. Bien que cette solution ait ses propres problèmes, par exemple lorsqu'un événement post-construction oublie de fonctionner correctement; mais c'est rare.

Hope this helps

0

Faites glisser votre fichier de projet dans un bloc-notes et Trouver avec "Importer" tag et de remplacer cette étiquette avec cette

Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" 

Son devrait fonctionner

0

Pour des raisons inconnues, Cela m'est arrivé avec Visual Studio 2013 en plein milieu d'une matinée. Un build, il était en train de mettre à jour la dll, le suivant, ce n'était pas le cas, même si la construction semblait se dérouler sans problème. J'ai finalement répondu en supprimant la DLL existante. En l'absence de dll préexistante, le build devait en fournir un nouveau.

Questions connexes