web-dev-qa-db-fra.com

"Impossible de trouver le AspnetMergePath valide" dans Visual Web Developer Publish?

Je souhaite utiliser Visual Web Developer Express 2010 pour publier un site Web, pré-compilé sur un serveur distant via FTP en utilisant les paramètres suivants:

  • Déployer uniquement les fichiers nécessaires à l'exécution de cette application
  • Précompiler cette application avant publication
  • Autoriser le site Web à être mis à jour
  • Aucune base de données n'est en cours de déploiement
  • Le site est en cours de déploiement en tant que hiérarchie de fichiers et non en tant que package .Zip

Ma première compilation/déploiement semblait s'être bien passé, mais après ma deuxième compilation, le message d'erreur suivant s'affiche:

Transformed web.config using C:\path_to_site\Web.Debug.config into obj\Debug\TransformWebConfig\transformed\web.config.
Copying all files to temporary location below for package/publish:
obj\Debug\AspnetCompileMerge\Source.
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets(132,5): Error : Can't find the valid AspnetMergePath

Et voici un sous-ensemble du contenu du fichier Microsoft.Web.Publishing.AspNetConfigurationMerge.targets:

  <Target
      Name="GetAspNetMergePath"
      DependsOnTargets="$(GetAspNetMergePathDependsOn)"
      Condition ="'$(GetAspNetMergePath)' != 'false'">
    <PropertyGroup>
      <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
      <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
    </PropertyGroup>
    <Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
           Text="Can't find the valid AspnetMergePath" />
  </Target>

ÉDITER: La modification des paramètres de publication pour supprimer tous les fichiers existants avant la publication ne résout pas le problème après tout. Je suppose que le problème est local pour l'instant à cause de cela.

Il ne semble pas y avoir de balise AspMergePath dans mon web.config. Je ne sais pas si je suis supposé ajouter manuellement la balise. Toutefois, le chemin "obj {paramètre de publication}\AspnetCompileMerge\Source" existe dans mon projet.

Et si cela compte, mon nom de projet est "TestProject.NET"

Vos commentaires sont appréciés.

23

Je frappe le même problème. Recherche dans tous les sites liés à Microsoft, a trouvé beaucoup de plaintes et aucune intention de Microsoft de la réparer.

Voici comment je l'ai travaillé sur mon système. Editez le fichier Microsoft.Web.Publishing.AspNetConfigurationMerge.targets et ajoutez la ligne suivante. Assurez-vous que le chemin du SDK Microsoft est identique sur votre PC. Sinon, changez-le:

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>

Voici à quoi cela devrait ressembler:

  <Target
  Name="GetAspNetMergePath"
  DependsOnTargets="$(GetAspNetMergePathDependsOn)"
  Condition ="'$(GetAspNetMergePath)' != 'false'">
<PropertyGroup>
  <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\</TargetFrameworkSDKToolsDirectory>
  <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
  <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
</PropertyGroup>
<Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
       Text="Can't find the valid AspnetMergePath" />

14
ialiashkevich

Ce dont vous avez besoin, c'est aspnet_merge.exe, outil distribué dans le cadre du Kit de développement logiciel (SDK) Windows. Il est destiné à précompiler des sites. Vous pouvez donc désactiver cette précompilation ou installer la version appropriée de Windows SDK . Il est fait référence à Wikipedia, car Nice a préparé des liens vers les pages de téléchargement. Vous n'avez pas besoin de tout télécharger/installer (c'est énorme), il suffit de télécharger le programme d'installation Web et de sélectionner les outils .Net, cela prendra environ 50 mégaoctets.

Veuillez noter que la version fournie avec le SDK Windows Visual Studio 2010 est fournie. La version 7.0A n'étant pas disponible pour un téléchargement séparé, vous devez donc installer Visual Studio sur votre serveur de construction ou modifier quelque chose comme décrit dans les réponses à " L'exécution de MSBuild ne lit pas SDKToolsPath ".

12
Andriy K

Voici une solution qui ne nécessite pas de changer le fichier de cibles. La solution de contournement de http://connect.Microsoft.com/VisualStudio/feedback/details/786492/publish-cant-find-the-valid-aspnetmergepath suggère de transmettre des propriétés supplémentaires à msbuild. J'ai pu le faire fonctionner en utilisant ceci:

msbuild website.publishproj/p: DeployOnBuild = true/p: PublishProfile = Publication /p:VisualStudioVersion=12.0/p: AspnetMergePath = "C:\Fichiers de programme (x86)\SDK Microsoft\Windows\v8.1A\bin\NETFX 4.5 .1 Outils\"

La clé ici est la propriété AspnetMergePath, que vous devrez peut-être modifier si le Kit de développement logiciel (SDK) Windows est installé à un emplacement différent. Si j'inclus la propriété GetAspNetMergePath de la solution de contournement, elle échoue, mais cela peut être nécessaire en fonction de la version du SDK.

11
tspauld

Une solution de rechange à tous ces problèmes (y compris l'installation du SDK, etc.) consiste à désactiver l'option Précompiler lors de la publication, ce qui nécessite la présence d'AspNetMerge même si vous ne spécifiez pas que vous souhaitez que les éléments soient fusionnés dans la sortie finale..

Je me suis donné beaucoup de mal pour comprendre comment le désactiver, en parcourant la boîte de dialogue des options et en lisant le Manuel convivial pour confirmer que je l'avais éteint depuis des lustres pour me rendre compte que c'était la case à cocher située à l'extérieur:

 enter image description here

Si vous décochez cette case, les modifications suivantes sont apportées au .pubxml:

-    <PrecompileBeforePublish>True</PrecompileBeforePublish>
-    <EnableUpdateable>True</EnableUpdateable>
-    <DebugSymbols>False</DebugSymbols>
-    <WDPMergeOption>DonotMerge</WDPMergeOption>

Ce qui a fonctionné pour moi.

NB il est aussi critique d’avoir comme couvert ici les deux sous-dossiersWeb (ce qui rendra la publication silencieuse via /p:DeployOnBuild inert) et le WebApplications (ce qui donnera une erreur de compilation) sous %Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v14.0 (en supposant les outils Visual Studio 2015) pour la publication afin de générer des packages avec succès

4
Ruben Bartelink

Je frappe le même problème. 

Editez le fichier Microsoft.Web.Publishing.AspNetConfigurationMerge.targets et ajoutez la ligne suivante. Assurez-vous que l'éditeur fonctionne avec les droits d'administrateur.

Regarde la version correcte Visual Studio dans mon cas VS2013.

x64

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>

x86

<TargetFrameworkSDKToolsDirectory>C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\</TargetFrameworkSDKToolsDirectory>

Et il fonctionne! Je peux compiler mon projet.

Dans mon cas, il manquait. C'est arrivé après la mise à jour de Visual Studio 2017 vers 15.7.5. Avant ça fonctionnait bien. Je dois ajouter 

<TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\</TargetFrameworkSDKToolsDirectory>

C'était à la ligne no 129 dans Microsoft.Web.Publishing.AspNetCompileMerge.targets

0
PM12