web-dev-qa-db-fra.com

MS-Build 2017 "Microsoft.WebApplication.targets" est manquant

J'essaie de mettre à niveau notre buildserver (Jenkins) de Visual Studio 2015 à 2017. Nous construisons via MS-Build. J'ai téléchargé et installé les outils MS-Buld comme décrit dans ce réponse . Si je compile mes projets, j'obtiens une erreur indiquant que Microsoft.WebApplication.targets n'a pas été trouvé.

Erreur détaillée:

 error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets"

J'ai effectué une recherche dans le répertoire MS-Build:

PS C:\Program Files (x86)\MSBuild> dir -Recurse -Filter "Microsoft.WebApplication.targets"


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       11.01.2012     00:23          19654 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       06.07.2015     21:55          20118 Microsoft.WebApplication.targets                                                                                                                                                                                


    Directory: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WebApplications


Mode                LastWriteTime         Length Name                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                            
-a----       22.07.2013     01:25          19995 Microsoft.WebApplication.targets

Comme on peut le constater, le fichier existe pour les anciennes versions du compilateur, mais il est manquant pour la version 15.0.

J'ai également installé Visual Studio 2017 sur le serveur de compilation. Le projet réussit à générer si je compile avec Visual Studio 2017.

Des astuces pour résoudre ce problème? Une solution possible consiste à générer un lien symbolique à partir de C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications point vers les anciens fichiers v14.0 (situés sous C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications).

Merci

59
Moerwald

On dirait que vous manquez de la charge de travail pour "Outils de développement de développement Web": Microsoft.VisualStudio.Workload.WebBuildTools .

Vous pouvez l'installer en téléchargeant le programme d'installation des outils de compilation à partir de ici (VS2017) ou ici (VS2019) puis en cours d'exécution.

_vs_buildtools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools
_

ou ouvrez _vs_buildtools.exe_ et sélectionnez le composant "Outils de développement de développement Web" dans l'interface graphique:

screenshot from GUI

82
Martin Ullrich

La réponse acceptée ci-dessus est techniquement correcte, elle est juste incomplète, un peu déroutante, du moins pour moi, et nécessite une étape supplémentaire pour que Visual Build Professional fonctionne.

  1. vs_buildtools.exe n'existe pas techniquement. Je devais créer une question demandant où se trouvait ce fichier. Il n'était pas évident que vs_buildtools.exe soit vs_buildtools _ *******. Exe et qu'il s'agisse du programme d'installation actuel. De plus, le "-add ***" mentionné ci-dessus n'est qu'un raccourci. Vous pouvez accéder à l'interface graphique et vérifier les deux tâches du flux de travail. Cela fait la même chose. J'ai fini par avoir le fichier vs_buildtools, bien que je n'en aie pas besoin.

  2. VSB Pro n'a toujours pas construit mon projet. J'ai eu la même erreur ci-dessus. La recette secrète consistait simplement à copier le dossier WebApplications dans C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0 vers C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0. J'ai ensuite reconstruit le projet et tout allait bien. J'ai placé le fichier WebApplication.targets à l'emplacement prévu.

Pourquoi Microsoft n'aurait pas pu faire cela, cela me dépasse. Aussi, pourquoi l'installation séparée. VS17 installe une quantité énorme de choses. Build Tools est impliqué, comme toujours. Peu importe.

Je publie cette réponse dans l'espoir que cela aidera les autres. Je suis tombé dans le piège et j'ai perdu pas mal de temps car mon projet ne se construisait pas. J'espère que cette réponse clarifie un peu les choses.

70
Sarah Weinberger

J'ai eu un problème similaire après la mise à niveau de Visual Studio 2015 à 2017. Lorsque j'essaie de charger le projet d'application Web, le message d'erreur suivant s'affiche:

Le projet importé "C:\Program Files (x86)\Microsoft Visual Studio\2017\Entreprise\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" est introuvable. Également, essayé de trouver "WebApplications\Microsoft.WebApplication.targets" dans le ou les chemins de recherche de secours pour $ (VSToolsPath) - "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0". Ces chemins de recherche sont définis dans "C:\Utilisateurs\xxx\AppData\Local\Microsoft\VisualStudio\15.0_558e146f\devenv.exe.config". Confirmez que le chemin dans la déclaration est correct et que le fichier existe sur le disque dans l'un des chemins de recherche.

La solution à cette erreur, j'ai trouvé ici .

Dans mon cas, le fichier .csproj contenait les lignes suivantes:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0</VSToolsPath>
</PropertyGroup>

Après avoir remplacé le v14.0 par v$(VisualStudioVersion) dans la balise VSToolPath, le projet pourrait être chargé.

J'ai également remplacé le v14.0 par v10.0 dans la balise VisualStudioVersion, comme le montre la solution dans le lien ci-dessus. Mais pour moi, cela a également fonctionné en le laissant à 14.0.

Voici à quoi devraient ressembler ces lignes:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Si vous n'avez pas du tout ces lignes dans votre .csproj, vous devez les ajouter manuellement AVANT cette ligne:

<Import Project="$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets" Condition="'$(VSToolsPath)' != ''" />

Dans mon cas (message d'erreur légèrement différent mais le même problème), c'était cette ligne:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Il semble que les projets créés avec les versions de Visual Studio depuis 2011 contiennent les lignes avec la redéfinition VSToolsPath, contrairement aux fichiers plus anciens. Visual Studio ne les a jamais ajoutés automatiquement lors de la mise à niveau vers une version VS plus récente, c'est pourquoi vous devez les ajouter s'ils ne sont pas présents.

Source de ces informations: https://developercommunity.visualstudio.com/content/problem/27735/project-fails-to-load-with-error-regarding-microso.html?childToView=123664#comment-123664 (cliquez sur Afficher plus de commentaires pour afficher le fil de discussion complet. Malheureusement, je ne peux pas créer de lien direct vers les commentaires de cette section "plus".)

15
Tobias

Il est facile d'installer les outils de compilation de 2017, avec l'option WebBuildTools déjà incluse, à l'aide de chocolatey . Une fois installé , tapez ce qui suit dans une invite de commande admin:

choco install visualstudio2017buildtools -y

Pour VS 2019, c'est similaire:

choco install visualstudio2019buildtools -y
9
alastairtree

Copier le dossier WebApplications de

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0

à

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0

Ou bien, dans votre script de construction, ajoutez la ligne suivante avant la compilation

Copy-Item "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications" "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications" -Recurse -Force

Assurez-vous de l'exécuter avec des autorisations élevées

7
adeel41

comment créer l'application MVC asp.net MV 2017 et la compiler avec Jenkins?

utiliser vs 2017 pro dans la machine de développement et le serveur de compilation

Vérifiez que VisualStudio est défini sur 15
Import Project = "$ (MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition = "false"

définit l'outil msbuild
dans C:\Program Files (x86)\Microsoft Visual Studio\2017\Professionnel\MSBuild\15.0\Bin\MSBuild.exe dans le gestionnaire de configuration global de Jenkins

Avec Jenkins, exécuter le batch de commande Windows:
rétablir les nugets: "C:\Program Files (x86)\Jenkins\outils\nuget\NuGet.exe" "restaurer" C:\Program Files (x86)\Jenkins\espace de travail\theapp_build\theapp.sln "

Avec Jenkins, exécuter le batch de commande Windows:
Fichier de construction MSBuild: theapp.sln
Arguments de la ligne de commande:/nologo/t: restore/t: reconstruire/p: Configuration = "Debug" /p:VisualStudioVersion=15.0

3
Viorel Banesaru