96 votes

Utilisation de msbuild pour exécuter un profil de publication du système de fichiers

J'ai un projet c# .Net 4.0 créé avec VS2010 et maintenant utilisé avec VS2012.

Je tente de publier uniquement les fichiers nécessaires de ce site Web vers un emplacement de destination (C:\builds\MyProject[Files])

Ma structure de fichiers: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml

Je lance la commande suivante via MSBuild:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml

Voici le xml dans FileSystemDebug.pubxml

    FileSystem
    Release
    Any CPU

    False
    C:\builds\MyProject\
    True

Le comportement obtenu est le suivant:

  • un fichier zip est créé ici:./ProjectRoot/obj/Debug/Package/MyProject.zip
  • Rien n'est déployé à C:\builds\MyProject\ WTF
  • le fichier zip créé est un vrai fourre-tout et plein de fichiers qui ne sont pas nécessaires pour l'application.

Lorsque j'exécute ce profil de publication à travers Visual Studio, un dossier est créé à *C:\builds\MyProject* et contient les artefacts exacts que je veux.

Comment obtenir ce résultat simple avec msbuild?

3voto

From Orbonia Points 103

Pour information : Même problème lors de l'exécution sur un serveur de build (Jenkins avec msbuild 15 installé, piloté par VS 2017 sur un projet web .NET Core 2.1).

Dans mon cas, c'était l'utilisation de la cible "publish" avec msbuild qui ignorait le profil.

Alors ma commande msbuild a commencé par :

msbuild /t:restore;build;publish

Cela a correctement déclenché le processus de publication, mais aucune combinaison ou variation de "/p:PublishProfile=FolderProfile" n'a jamais fonctionné pour sélectionner le profil que je voulais utiliser ("FolderProfile").

Quand j'ai arrêté d'utiliser la cible de publication :

msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile

J'ai (bêtement) pensé que cela ne ferait aucune différence, mais dès que j'ai utilisé l'option DeployOnBuild, il a correctement pris en compte le profil.

1voto

Shammie Points 111

Vérifiez d'abord la version de Visual Studio du PC du développeur qui peut publier la solution (projet). Tel que montré pour VS 2013

 /p:VisualStudioVersion=12.0

Ajoutez la ligne de commande ci-dessus pour spécifier quel type de version de Visual Studio doit construire le projet. Comme mentionné précédemment, cela peut se produire lorsque nous essayons de publier un seul projet, et non pas toute la solution.

Donc, le code complet ressemblerait à ceci

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\Program Files (x86)\Jenkins\workspace\Jenkinssecondsample\MVCSampleJenkins\MVCSampleJenkins.csproj" /T:Build;Package /p:Configuration=DEBUG /p:OutputPath="obj\DEBUG" /p:DeployIisAppPath="Default Web Site/jenkinsdemoapp" /p:VisualStudioVersion=12.0

0voto

Toolkit Points 141

Exécutez à partir du dossier du projet

msbuild /p:DeployOnBuild=true /p:PublishProfile="release-file.pubxml" /p:AspnetMergePath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" /p:Configuration=Release

Cela s'occupe de la transformation de web.config et d'AspnetMergePath

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