J'ai une solution qui contient deux applications Web ASP.Net de base (pas MVC ou .Net Core) et quelques bibliothèques dont elles dépendent.
J'ai une définition de build dans VSTS qui contient une étape de construction de Visual Studio, qui construit la solution avec MSBuild.
L'ensemble d'arguments MSBuild par défaut regroupe chaque application Web dans un seul fichier, à déployer via un fichier batch:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
Je ne peux pas utiliser cette méthode et exiger que le site Web soit publié dans le système de fichiers afin que les scripts existants puissent effectuer le déploiement.
J'ai donc changé ces arguments en:
/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl=$(build.artifactstagingdirectory)\website
Cela publie en effet les deux sites Web dans le système de fichiers, mais le problème est qu'ils les placent l'un sur l'autre dans le même dossier.
Existe-t-il un moyen de transmettre une sorte d'URL paramétrée à publishUrl
de sorte que les deux sites Web puissent se retrouver dans des dossiers différents? Ou dois-je faire une étape MSBuild pour chaque projet individuellement?
Vous aurez besoin d'ajouter une logique de construction supplémentaire dans votre projet, faites-le en une seule invocation.
Vous pouvez créer un fichier Directory.Build.props
Dans le répertoire racine de votre solution (afin que tous les projets Web se trouvent en dessous dans la hiérarchie des répertoires) avec le contenu suivant:
<Project>
<PropertyGroup>
<PublishUrl Condition="'$(PublishBaseUrl)' != '' and '$(PublishUrl)' == ''">$(PublishBaseUrl)\$(MSBuildProjectName)\</PublishUrl>
</PropertyGroup>
</Project>
Cela vous permet de définir /p:PublishBaseUrl="$(build.artifactstagingdirectory)\\"
comme paramètre au lieu de PublishUrl
et le nom du projet sera ajouté au chemin.