MSBuild construit des projets avec des références de projet correctement mais pas de la solution
Quand je construis un A. de la sln qui comprend 2 projets B. csproj et C. csproj qui possède des références de projet jette les erreurs de référence dans MSBuild. Mais quand je construis B. csproj et C. csproj séparément dans MSBuild il ne jetez pas les erreurs. Et aussi la construction de A. de la sln en VS IDE aussi, ne jetez pas les erreurs.Je suis en utilisant .NET framework 2.0. Veuillez trouver ci-dessous les scripts utilisés pour construire la sln et projs.
MSBuild "<path>/A.sln" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\A.sln.log /verbosity:normal
MSBuild "<path>/B.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\B.csproj.log /verbosity:normal
MSBuild "<path>/C.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\C.csproj.log /verbosity:normal
Edit:
Toutes les erreurs sont jetés de code manquant refernces(tous sont des références de projet). J'obtiens seulement trois types d'erreurs comme donné ci-dessous.
erreur CS0012: Le type " X " est défini
dans une assemblée qui n'est pas référencé.
Vous devez ajouter une référence à l'assembly
"Y, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=aad4cbe5d7c27078'.erreur CS0234: Le type ou l'espace de noms
le nom de " X " n'existe pas dans le
espace de noms 'Y' (vous manque un
assemblée de référence?)erreur CS0246: Le type ou l'espace de noms
nom de la 'X' n'a pas pu être trouvée (êtes-vous
manque une directive using ou une
assemblée de référence?)
J'ai effacé toutes les données déjà construit dll à partir de construire des chemins, avant la construction de deux IDE et MSBuild. Mais IDE juste fonctionne très bien et ne montrent pas une référence indicateurs manquants dans les "Références" de l'article pour le projet.
Aucune référence chemins ajoutés manuellement dans l'IDE.
Une Autre Mise À Jour:
Je viens de remarquer que lorsque j'ai ouvert les deux projets de la solution, les références sont correctement orientées dans l'IDE. Mais quand j'ai ouvert les projets séparément dans l'IDE, les références manquantes je l'ai mentionné survenant dans MSBuild chair de poule. Très bizarre.
Donc, pour résumer,
Buiilding .proj dans MSBuild - Bon
Buiilding .proj IDE - Erreur
Buiilding .la sln dans MSBuild - Erreur
Buiilding .la sln IDE - Bon
Semble très bizarre pour moi. Aider beaucoup apprécié.
source d'informationauteur blntechie
Vous devez vous connecter pour publier un commentaire.
MSBuild et VS les deux utilisent des références de projet et les dépendances d'un projet à choisir la solution d'ordre de construction. Au-delà de ça, c'est non définie - et généralement différente entre les deux. Vérifiez ces deux sont corrects. Les dépendances d'un projet sont définies dans les propriétés de votre solution.
Si cela ne fonctionne pas, vérifier le Guid dans les références du projet dans vos projets correspondent à ceux de la solution. Parfois recréer la solution peut les corriger.
Pour moi, quand j'ai eu cette (ou similaire) problème, vérifier manuellement (et correction) le guid ligne résout mon problème. C'est gênant d'en trouver guid entre .la sln et .csproj fichiers, mais il fonctionne.
J'ai l'habitude de déposer le projet de référence et ajouter de nouveau, et qui résout le problème (une fois j'ai trouvé le fautif incompatibles guid). Peut être que je devrais essayer en premier. C'est plus facile.
Certaines choses à prendre en compte: la construction d'une solution dans l'IDE n'est pas la même que l'exécution de MSBUILD sur le .la sln fichier. Vous pouvez essayer en utilisant devenv.exe /reconstruction A. de la sln à la place. L'IDE joue à plusieurs jeux afin de permettre un .la sln fichier pour créer, y compris la création d'un "équivalent" MSBUILD-projet de style.
Aussi, l'IDE n'est pas directement vient se reproduire hors de MSBUILD commandes. Il y a une interaction entre les deux afin d'en améliorer les performances. Par exemple, le SCC tâches du projet sont probablement exécutés à l'intérieur de l'IDE, plutôt que comme séparée de la ligne de commande s'appuie, comme MSBUILD aurait donné naissance à eux.
Vous devriez également envisager d'obtenir Moniteur de Processus de http://technet.microsoft.com/sysinternals/ pour regarder les fichiers qui sont en cours d'accès.
Comme Jon Skeet mentionné, un message d'erreur serait utile de savoir quel est le problème. Sans plus de détails, bien que, si elle s'appuie dans l'IDE, mais de ne pas construire dans MSBuild, il semble que vous pourriez avoir des Dll que vous faites référence dans vos projets qui ne sont pas disponibles dans le chemin où vous êtes la construction de la solution. Peut-être vous ont été manuellement les copier de quelque part de l'IDE pourrait les trouver, ou vous avez eu les chemins de références mis en place dans votre IDE de se regarder dans un certain dossier.
Juste quelque chose à vérifier lorsque vous êtes obtenir les autres détails sur la question.
EDIT: Maintenant qu'il y a certains détails, il pourrait être d'un ordre de construire problème. Est-il une référence de projet dans un projet B projet C? Si oui, vous pourriez juste besoin de changer l'ordre de construire le projet C avant projet B.
Retirez l'assemblage du GAC(C:\WINDOWS\assembly dossier - sélectionnez votre assebly et faites un clic droit et désinstaller).
Parce que la solution de garde de référence à l'aide de guid et si ce guid est dans le GAC, il va continuer à prendre du GAC version pour la compilation.