1

.NET 4.5 – WebDeploy de projet .NET 4.5

Sur l’un des projets sur lequel j’interviens, j’ai mis en place un certain nombre d’éléments dont un build personnalisé avec du déploiement automatique via WebDeploy. Suite à une migration de la solution du .NET 4.0 vers .NET 4.5, j’ai été confronté à l’erreur suivante lors de l’exécution du mon build :

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3847): Web deployment task failed.((12/9/2013 3:42:30 PM) An error occurred when the request was processed on the remote computer.) (12/9/2013 3:42:30 PM) An error occurred when the request was processed on the remote computer. The application pool that you are trying to use has the ‘managedRuntimeVersion’ property set to ‘v4.0’. This application requires ‘v4.5’.

Le premier point que l’on soupçonne en voyant cette erreur c’est que le Framework .NET 4.5 ne doit pas être installé sur le serveur cible. Pourtant, il l’est. La seconde supposition serai de ce dire que l’application pool doit être reconfiguré pour utiliser 4.5. Mais non, car avec le .NET 4.5, le runtime n’a pas changé, il s’agit toujours de la version 4.0.

En fait, le soucis provient d’un bug de la tâche WebDeploy pour le build. Le fichier manifeste du package de déploiement est généré avec une erreur. Il définit l’attribut managedRuntimeVersion à la valeur 4.5 au lieu de 4.0. Il doit probablement prendre la version du Framework au lieu de la valeur du runtime pour l’application pool.

Pour s’en rendre compte, il suffit d’ouvrir le fichier SourceManifest.xml généré avec votre package. Voici un exemple de génération de ce fichier (N.B : j’ai raccourci volontairement les path des éléments avec …) :

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <IisApp path="…\obj\Release\Package\PackageTmp" managedRuntimeVersion="v4.5" />
  <setAcl path="…\obj\Release\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="…\obj\Release\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

Pour résoudre ce problème, il suffit d’éditer le fichier projet de votre ou vos applications en ajoutant la balise DeployManagedRuntimeVersion pour obtenir ceci :

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>

Désormais, si on relance le processus, le fichier SourceManifest.xml est correctement généré :

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <IisApp path="…\obj\Release\Package\PackageTmp" managedRuntimeVersion="v4.0" />
  <setAcl path="…\obj\Release\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="…\obj\Release\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

Voilà.

Rock’n’Roll.

gbrout

Architecte, formateur MCT et expert sur la gamme Visual Studio ALM qu'il met en œuvre sur l'ensemble des projets. Il travaille pour la société Itelios, spécialisée dans les technologies Microsoft et le commerce connecté. Il accompagne quotidiennement de nombreuses équipes et projets dans différents domaines et technologies : Windows 8, Windows Phone, ASP.NET MVC, Dynamics CRM... Passionné par le développement, ses domaines de prédilections sont avant tout l'expertise technique, l'industrialisation des développements avec la gamme Visual Studio ALM, l'analyse des performances, les tests et tout ce qui a trait à la qualité. Son expertise sur les  technologies Microsoft sa passion pour les nouvelles technologies et les développements novateurs l'a conduit à l'écriture d'un livre accessible et opérationnel sur le développement pour Windows 8 à l'aide d'HTML5 et JavaScript. Il anime également des conférences et sessions techniques telles que des live meeting en ligne ou lors d’événements comme les Techdays.

Un Commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *