Lancer MSBuild ne lit pas SDKToolsPath

Howdy, je suis un peu d'un problème exécuter un script NAnt qui a utilisé pour correctement construire mon .net 2.0 basé site, lors de la compilation avec VS2008 et il est associé des outils. J'ai récemment mis à jour tous les fichiers projet/solution à VS2010, et maintenant ma construction échoue avec l'erreur suivante:

[exec] C:WindowsMicrosoft.NETFramework64v4.0.30319Microsoft.Common.targets(2249,9): erreur MSB3086: tâche impossible de trouver "sgen.exe " en utilisant le S dkToolsPath "" ou la clé de registre "HKEY_LOCAL_MACHINESOFTWARE MicrosoftMicrosoft SDKsWindowsv7.0A". Assurez-vous que le SdkToolsPath est défini et l'outil existe dans le bon processeur emplacement précis sous le SdkToolsPath et que le Microsoft Windows SDK est installé

maintenant, j'ai les versions précédentes (.Net 3.5) du SDK Windows installé sur le serveur de construction, et le cadre complet .Net 4.0 est installé, mais je n'ai pas exécuté à travers un .Net 4.0 version spécifique du SDK Windows.

après un peu d'expérimentation et de recherche, j'ai finalement juste mis en place une nouvelle variable environnementale "SDKToolsPath" et l'ai pointé vers la copie de sgen.exe dans mon dossier Windows 6.0 sdk. Cela a généré la même erreur, mais il m'a fait remarquer que même si la variable d'environnement SDKToolsPath est définie (confirmé que je peux "echo" il à la ligne de commande et il a la valeur attendue), le message d'erreur semble indiquer que c'est ne pas être lu (notez les guillemets vides).

la plupart des informations que j'ai trouvées sont spécifiques à .Net 3.5 (ou plus tôt). Il n'y a pas encore beaucoup de 4.0. La recherche du code D'erreur MSB3086 n'a généré rien d'utile non plus. Aucune idée de ce que cela pourrait être?

Scott

122
demandé sur abatishchev 2010-04-28 20:30:36

23 réponses

j'ai dû mordre le morceau et installer VS 2010 sur notre serveur de construction pour corriger ce problème. Pour autant que je puisse voir, il n'y a pas de version 7.0 de Windows SDK disponible n'importe où sur MSDN. Cependant, l'installation VS 2010 semble l'installer, créant un 7.0 a regkey et un 7.0 A dossier dans les fichiers de programme\Microsoft SDKs\Windows.

13
répondu John Hann 2010-04-29 16:43:53

Je ne pouvais pas supporter de 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, une nouvelle version a été publiée. Microsoft Windows SDK pour Windows 7 et .net Framework alias v7.1 .

j'ai installé ceci sur mon serveur de construction. Et ensuite via L'invite de commande SDK 7.1 de Windows (Start = > tous les programmes = > Microsoft Windows SDK 7.1), j'ai défini la version par défaut du SDK à 7.1.

Suit:

cd Setup

WindowsSdkVer.exe -version:v7.1

Modifier pour inclure le commentaire de LordHits: on n'a pas besoin d'installer le SDK entier. Il suffit d'installer les options ".net Development/Intellisense and Reference Assemblies" et ".NET Development/Tools".

225
répondu Simmo 2012-01-19 12:31:18

passez simplement le paramètre GenerateSerializationAssemblies avec la valeur à votre MsBuild.

msbuild.exe /p:GenerateSerializationAssemblies=Off
17
répondu Daniel 2016-11-16 11:47:48

j'ai rencontré un problème similaire récemment sur notre serveur de compilation.

j'ai copié le dossier 7.0 A (C:\Program fichiers\Microsoft SDKs\Windows\7.0 a) de mon ordinateur (qui a VS2010 installé) sur elle au serveur de construction au même endroit.

après avoir créé la clé de Registre suivante: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SDKs\Windows\v7.0A. Définir InstallationFolder à C:\Program fichiers\Microsoft SDKs\Windows\7.0 A.

vous pouvez également faire référence au Registre sur votre machine avec VS2010 déjà installé dessus si vous ne savez pas quoi faire avec le Registre sur le serveur de compilation.

8
répondu brandogs 2011-01-06 22:54:16

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 SDK - cependant WindowsSdkVer.exe (version setter tool) semble ne pas cibler Express (compréhensible car il est limité).

J'utilise VS 2010 Express sur Win 7 prof.et il veut toujours utiliser v7.0A du win SDK (qui n'a pas tous les exes nécessaires), et il deosn n'a pas d'importance quelle version j'ai explicitement défini comme actuelle en utilisant WindowsSdkVer.exe (Il garde le reporting de l'ensemble de la version actuelle de java SDK mais pour VS 2008 bien que si je n'ai que 2010 Ex installé. )

donc mon solution de contournement bon marché était d'installer v7.0 WIN SDK (ou une autre version comme v7.1) et ensuite renommer son dossier de système de fichiers en v7.0A - fondamentalement, j'ai juste menti à VS 2010 Express mais cela fonctionne maintenant!

7
répondu John K 2017-05-23 12:26:23

je passe manuellement les variables à MSBuild sur le serveur de compilation.

msbuild.exe MyProject.csproj "/p:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" "/p:AspnetMergePath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"

7
répondu Der_Meister 2017-06-09 07:27:34

je soupçonne que le fichier targets supplante le chemin des outils, j'ai eu un coup d'oeil rapide dans ce fichier et il définit le SDKToolsPath à $TargetFrameworkSDKToolsDirectory sous certaines des cibles. Je ne pense pas que vous devriez avoir besoin de les mettre dans l'environnement de toute façon, mais ils peuvent avoir besoin de correction dans vos dossiers de projet.

notez que selon cette page http://nant.sourceforge.net / Nant ne supporte pas .Net 4.0, cela pourrait-il être le vrai problème?

Désolé, je sais que cela ne répond pas vraiment à votre question: (

4
répondu Steve Haigh 2010-04-28 16:44:47

un de vos projets utilise le sgen.exe (Server Generator) pour générer le service web. vous avez besoin d'installer des SDK pour construire le serveur ou supprimer les références de Service Web du projet.

4
répondu Maer007 2011-05-12 16:06:35

vous n'avez pas la version SDK 7.0 A installée? C'est un problème que vous devez résoudre. Regardez dans les fichiers d'installation de VS2010 pour voir ce qui a mal tourné. Le SDK doit être présent en c:\program les fichiers\Microsoft sdks\windows\7.0 A et la clé de registre listée doivent également être présents. Avec la version 6.0 a de sgen.exe ne va pas bien, il est lié à utiliser le mauvais compilateur.

3
répondu Hans Passant 2010-04-28 18:45:39

définit Sdk40ToolsPath plutôt que SdkToolsPath pour spécifier un emplacement autre que le répertoire d'installation.

j'ai rencontré un problème similaire avec AL.exe parce que je venais de xcopier les outils sur la machine de construction plutôt que d'installer le SDK, donc les clés de registre habituelles étaient manquantes. J'ai lancé une construction avec une sortie de diagnostic (/verbosity:diagnostic) et j'ai remarqué qu'il y avait plusieurs chemins D'outils SDK définis: Sdk40ToolsPath, Sdk35ToolsPath et SdkToolsPath. Paramètre Sdk40ToolsPath pour pointer vers le dossier bin de la version SDK appropriée a résolu le problème pour moi.

3
répondu IanS 2010-07-01 11:55:28

j'ai eu le même problème sur une toute nouvelle machine Windows 10. Mon installation:

  • Windows 10
  • Visual Studio 2015 Installé
  • Windows 10 SDK

Mais je ne pouvais pas en faire .NET 4.0 projets:

Die Aufgabe konnte" AL.exe "mit dem SdkToolsPath-Wert "" oder dem Registrierungsschlüssel "HKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft\Microsoft SDKs\Windows\v8.0a\WinSDK-NetFx40Tools-x86

Solution: Après avoir essayé (et échoué) à installer le SDK Windows 7 (parce que cela inclut également le SDK .NET 4.0), j'ai dû installer le SDK Windows 8 et m'assurer que le ".net Framework 4.5 SDK" est installé.

c'est fou... mais il a travaillé.

3
répondu Robert Muehsig 2015-11-17 09:59:30

je suis d'accord avec la réponse de IanS. Pas besoin d'installer un nouveau SDK. Assurez-vous juste que les valeurs clés SDK35ToolsPath et SDK40ToolPath pour MSBuild pointent vers les valeurs clés de registre correctes.

dans mon cas mon projet a été ciblé pour .net 3.5 et j'ai dû mettre SDK35ToolsPath pour HKEY_LOCAL_MACHINE \ SOFTWARE\Microsoft\MSBuild\ToolsVersions \ 4.0 à $(Registre:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft SDKs\Windows\v6.0A\WinSDKNetFxTools@InstallationFolder). Et tout a fonctionné.

2
répondu Anna 2010-12-15 21:28:25

nous avons un PC de construction winXP, et utiliser Visual Build Pro 6 pour construire notre logiciel. comme certains de nos développeurs utilisent VS 2010, les fichiers de projet contiennent maintenant une référence à "l'outil version 4.0" et de ce que je peux dire, cela dit à Visual Build qu'il doit trouver un sdk7.x quelque part, même si nous ne construisons que pour .NET 3.5. Cela lui a causé de ne pas trouver lc.EXE. J'ai essayé de le tromper en pointant toutes les macros sur la 6.0 un sdk qui est venu avec VS2008 qui est installé sur le pc, mais qui n'a pas fonctionné.

j'ai fini par le faire fonctionner en téléchargeant et en installant le sdk 7.1. J'ai ensuite créé une clé de Registre pour 7.0 A et j'ai pointé le chemin d'installation vers le chemin d'installation du sdk 7.1. maintenant, il trouve heureusement un " LC " compatible.exe" et tout le code se compile bien. J'ai le sentiment que je pourrai désormais compiler le code .NET 4.0 même si VS2010 n'est pas installé, mais je n'ai pas encore essayé.

2
répondu Herbie Marais 2012-04-04 21:28:08

ToolsVersion="4.0" le fait pour moi dans mon projet MSBuild:

<Project DefaultTargets="Do" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
répondu AlexeiOst 2013-02-26 03:47:27

j'ai eu ce même problème et j'ai installé Windows SDK 7.0 et Windows SDK 7.1 qui n'ont pas corrigé le problème. La cause du problème pour moi était que la bibliothèque de classe incriminée a été construite avec le cadre cible de .net Framework 2.0.

Je l'ai changé en .net Framework 4.0 et travaillé localement et une fois vérifié dans le serveur de construction construit avec succès.

1
répondu Rob Bramhall 2013-01-22 00:44:24

j'ai eu un problème similaire, notamment msbuild échoue: MSB3086, MSB3091: "AL.exe", " resgen.exe "non trouvé 151930920"

sur une machine Windows 7 64 bits, J'ai installé .net framework 4.5.1 et Windows SDK pour Windows 8.1.

bien que les configurations pour le SDK disent qu'il était à jour, probablement pas. J'ai résolu le problème en supprimant toutes les versions installées de SDK, puis en installant ce qui suit, dans cet ordre:

http://www.microsoft.com/en-us/download/details.aspx?id=3138

http://www.microsoft.com/en-us/download/details.aspx?id=8279

http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx

1
répondu Starnuto di topo 2017-05-23 12:10:29

réponse Courte: Dans le .fichier csproj, il y a une façon de spécifier le chemin vers sgen.exe, en utilisant SGenToolPath:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <SGenToolPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools</SGenToolPath>
  </PropertyGroup>

votre chemin peut être différent, mais SGenToolPath est ce que vous voulez.

pour une liste des autres propriétés communes du projet MSBuild, voir: https://msdn.microsoft.com/en-us/library/bb629394.aspx

nous avons fini par utiliser ce paramètre SGenToolPath dans le .fichier csproj, au lieu de éditer les valeurs de Registre sur le serveur de compilation. Éditer les valeurs de Registre sur ma machine locale avait fonctionné aussi bien, mais était un peu plus compliqué et nous ne voulions pas jouer avec le Registre sur le serveur de compilation.

pour le Registre: dans ce cas, le problème était que le SDK40ToolsPath(s) sous HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild pointaient vers une valeur de registre $(Registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86@InstallationFolder) qui n'existait pas. J'ai juste remplacé ça par le vrai chemin directement.

1
répondu TomEberhard 2016-05-18 00:51:43

assurez-vous D'abord que vous êtes déjà télécharger dotNetFx40_Full_x86_x64.exe et installé (il est généralement lié avec Visual Stdio).

définit alors rapidement de nouvelles Variables D'environnement à des variables de système. comme ci-dessous: "TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.

1
répondu TommyWhite 2018-02-27 06:02:26

outre les mods de registre, vous pouvez avoir besoin de changer la version du .net sdk vos paramètres mis à Dans Visual Studio.

j'avais ce problème et j'ai décidé de vérifier les paramètres de débogage du projet.

Projet => Barre D'Outils Propriétés => Débogage Bouton "Advance Compile Options

le cadre cible (toutes les configurations) a été mis à 3.0, ce qui n'est pas sur mon système.

j'ai changé cela à 4.0, puis avait pour relancer le projet et Visual Studio 2010.

le projet alors construit sans erreurs et a couru.

0
répondu Scott Tovey 2012-03-29 06:45:57

j'ai eu un problème similaire. J'avais fait un projet en utilisant Visual Studio 2010 et puis j'ai eu l'erreur ci-dessus quand je l'ai compilé en utilisant Visual Studio 2012 . J'ai simplement copié tout le contenu de C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A dans C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A et cela a résolu mon problème.

0
répondu Leo Rams 2015-10-19 14:44:32

je viens d'avoir cette erreur avec un .fichier sln créé à L'origine dans Visual Studio 2010 (et construit par Visual Studio 2010 et TFS 2010). J'avais modifié le fichier solution pour ne pas construire un projet qui n'était pas censé être construit dans une configuration particulière et visual studio a changé l'en-tête du fichier solution de:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

à:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1

revenir à la version originale 2010 a corrigé mon problème. Je la compatibilité ascendante dans Visual Studio n'est pas encore parfaite.

0
répondu Mike Cheel 2015-12-16 19:32:56

essayez la "réparation"de visual studio. Il a travaillé pour moi.

0
répondu Shirli 2016-02-22 08:47:00

CMD wrapper 151980920"
J'ai essayé toutes les choses d'ici et encore plus. Rien ne m'a aidé.

j'ai appliqué un CMD wrappers pour MSBuild et DevEnv.com.

L'idée principale à l'intérieur d'un tel wrapper est de créer un environnement préparé en appelant des messages de commande de Visual Studio supply. Et puis passer les paramètres d'entrée standard à un appel de MSBuild ou DevEnv.com.

de toute façon, sur mon serveur de construction je peux maintenant construire des projets à partir de différentes versions de Visual Studio.

comment utiliser

J'ai dû substituer des appels à MSBuild et à DevEnv par un appel à mes paquets de fichiers batch.

Et je n'ai pas changer tous les paramètres d'entrée. Comme exemple pour mon appel MSBuild wrapper:

MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release

solution Prête à l'emploi

En fait, j'ai eu beaucoup plus de problèmes avec une migration de VS 2010 à VS 2015. Mais celui-ci fut le premier et le plus dur.

Donc, ma modeste recette de sauvetage pour un serveur de construction est ici. Il est peut-être difficile de comprendre tout ce style CMD dès le premier instant, mais toute logique est évidente, je l'espère.

Indices

Il y a

MSBuild Command Prompt for Visual Studio et Developer Command Prompt for Visual Studio

Je les utilise de manière appropriée pour MSBuild et DevEnv.com. Mais l'invite de commande MSBuild suffira probablement.

pour VS 2015 ces messages sont ici C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\ . Ou regardez dans le menu Windows programs.

pour passer tous les paramètres d'entrée à MSBuild ou à DevEnv dans un fichier de lot, j'ai utilisé CALL MSBuild %*

0
répondu it3xl 2017-01-21 21:04:05