134 votes

L'exécution de MSBuild ne parvient pas à lire le SDKToolsPath.

Bonjour, j'ai un peu de mal à exécuter un script de NAnt qui avait l'habitude de construire correctement mon site web basé sur .Net 2.0, lors de la compilation avec VS2008 et ses outils associés. J'ai récemment mis à jour tous les fichiers de projet/solution vers VS2010, et maintenant ma construction échoue avec l'erreur suivante :

[exec] C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (2249,9) : erreur MSB3086 : La tâche n'a pas pu trouver "sgen.exe" en utilisant le S dkToolsPath "". ou la clé de registre "HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Microsoft SDKs \Windows\v7.0A ". Assurez-vous que le SdkToolsPath est défini et que l'outil existe dans l'emplacement spécifique au processeur dans le répertoire SdkToolsPath et que le Microsoft Windows SDK est installé

J'ai bien des versions antérieures (.Net 3.5) du SDK Windows installées sur le serveur de construction, et le cadre complet .Net 4.0 est installé, mais je ne suis pas tombé sur une version spécifique .Net 4.0 du SDK Windows.

Après un peu d'expérimentation et de recherche, j'ai fini par créer une nouvelle variable d'environnement "SDKToolsPath" et je l'ai dirigée vers la copie de sgen.exe dans mon dossier sdk de Windows 6.0. Cela a généré la même erreur, mais j'ai remarqué que même si la variable d'environnement SDKToolsPath EST définie (ce qui a été confirmé par le fait que je peux en faire l'"écho" sur la ligne de commande et qu'elle a la valeur attendue), le message d'erreur semble indiquer qu'elle n'est pas lue (notez les guillemets vides).

La plupart des informations que j'ai trouvées sont spécifiques à .Net 3.5 (ou antérieur). Il n'y a pas encore beaucoup de choses liées à la version 4.0. La recherche du code d'erreur MSB3086 n'a rien donné d'utile non plus. Une idée de ce que cela pourrait être ?

Scott

0 votes

Question connexe dans ce post. J'y ai également posté une réponse. stackoverflow.com/questions/1109955/

227voto

Simmo Points 2364

Je ne pouvais pas faire face à mettre Visual Studio sur le serveur de construction.

Le SDK v7.0A est le SDK installé avec Visual Studio 2010 (le A indique qu'il s'agit d'une version VS). Depuis lors, une version plus récente a été publiée. SDK Microsoft Windows pour Windows 7 et .NET Framework AKA v7.1 .

Je l'ai installé sur mon serveur de construction. Puis, via l'invite de commande Windows SDK 7.1 (Démarrer => Tous les programmes => Microsoft Windows SDK 7.1), j'ai défini la version par défaut du SDK comme étant 7.1.

Des pas :

cd Setup

WindowsSdkVer.exe -version:v7.1

Modifier pour inclure le commentaire de LordHits : il n'est pas nécessaire d'installer l'ensemble du SDK. Il suffit d'installer les options ".NET Development/Intellisense and Reference Assemblies" et ".NET Development/Tools".

4 votes

Cela a parfaitement fonctionné pour moi, et j'ai copié les fichiers dans le dossier de l'entreprise. C:\Program Fichiers \MSBuild\Microsoft\VisualStudio\v10.0\WebApplications depuis ma machine VS.

1 votes

J'étais confronté au même problème que l'auteur original et cette réponse l'a résolu ! Je n'ai pas eu à installer Visual Studio 2010 sur ma machine Build.

37 votes

De plus, juste pour clarifier, il n'est pas nécessaire d'installer le SDK complet. Il suffit d'installer les options ".NET Development/Intellisense and Reference Assemblies" et ".NET Development/Tools". Ceci et copier les fichiers du commentaire de dnolan.

23voto

Daniel Points 152

Il suffit de passer le paramètre GenerateSerializationAssemblies avec la valeur Off à votre MsBuild.

msbuild.exe /p:GenerateSerializationAssemblies=Off

8 votes

Msbuild.exe /p:GenerateSerializationAssemblies=Off

3 votes

Ou définissez "Generate serialization assembly : Off" dans l'onglet Build des propriétés du projet de service web.

7 votes

Qu'est-ce que ça fait exactement ?

15voto

John Hann Points 555

J'ai dû prendre le taureau par les cornes et installer VS 2010 sur notre serveur de construction pour résoudre ce problème. Pour autant que je puisse voir, il n'y a pas de version 7.0A du SDK Windows disponible nulle part sur MSDN. Cependant, l'installation de VS 2010 semble l'installer, créant une clé de registre 7.0A et un dossier 7.0A dans Program Files. \Microsoft SDKs \Windows.

0 votes

Oui, j'ai fini par faire cela aussi et cela a résolu mon problème. Mais je ne suis pas ravi d'avoir tout l'environnement VS2010 sur mon serveur de construction alors qu'il semble qu'il devrait simplement y avoir une version téléchargeable du SDK Windows 7.0a. J'aimerais connaître l'URL si quelqu'un l'a disponible.

0 votes

microsoft.com/downloads/ il s'agit du SDK ver. 7. N'est-ce pas ?

0 votes

Oui, mais ce n'est pas la version 7.0a, et c'est important ici. Il y a une solution de contournement intéressante postée ici, je ne l'ai pas essayée moi-même : stackoverflow.com/questions/1109955/

8voto

brandogs Points 387

J'ai rencontré un problème similaire tout récemment sur notre serveur de construction.

J'ai copié le dossier 7.0A ( C:\Program Fichiers \Microsoft SDKs \Windows\7.0A ) depuis mon ordinateur (sur lequel VS2010 est installé) vers le serveur de construction situé au même endroit.

Après avoir créé la clé de registre suivante : HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Microsoft SDKs \Windows\v7.0A. Définir InstallationFolder comme C:\Program Fichiers \Microsoft SDKs \Windows\7.0A.

Vous pouvez également faire référence au registre de votre machine sur laquelle VS2010 est déjà installé si vous ne savez pas quoi faire avec le registre du serveur de construction.

0 votes

Pour moi, la réponse de Simmo n'a pas fonctionné, mais ce hack de registre a fonctionné (Win 2K3 SP2).

7voto

John K Points 13695

J'ai rencontré la même erreur mais dans une situation différente : en utilisant VS 2010 Express et en essayant d'utiliser Réponse de Simmo pour définir explicitement la version du SDK - cependant WindowsSdkVer.exe (outil de définition de la version) semble ne pas cibler Express (compréhensible puisqu'il est limité).

J'utilise VS 2010 Express sur Win 7 Prof. et il veut toujours utiliser la version 7.0A du SDK Win (qui n'a pas tous les exes nécessaires), et cela n'a pas d'importance quelle version je définis explicitement comme actuelle en utilisant WindowsSdkVer.exe (Il continue à signaler qu'il a défini la version actuelle du SDK mais pour VS 2008 bien que j'ai seulement 2010 Ex installé. )

Donc mon solution de contournement bon marché était d'installer la v7.0 WIN SDK (ou une autre version comme la v7.1) et ensuite renommer son dossier de système de fichiers en v7.0A - En fait, je viens de mentir à VS 2010 Express mais cela fonctionne maintenant !

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