Question

J'ai un fichier SLN normal et je le compile bien avec msbuild à partir de la ligne de commande. Je fais ça:

C: \ slndir > msbuild / p: OutDir = C: \ slnbin \

Et tout est transféré dans C: \ slnbin, à l'exception des sites Web déployés sur C: \ slnbin_PublishedWebsites \.

Ce que je voudrais, c'est non seulement que tous les fichiers binaires soient déposés dans le répertoire bin, mais également que chaque programme exécutable ait son propre "déployé". dossier, similaire à ce que chaque site Web obtient.

Donc, par exemple, si j’ai les projets suivants:  - Commun  - Lib1  - Service1  - Lib2  - Service2

Je veux obtenir:

  C:\slnbin\ // Everything
  C:\slbin\Deploy\Service1 // Common, Lib1, Service1
  C:\slbin\Deploy\Service2 // Common, Lib2, Service2

J'ai essayé de faire des choses comme "msbuild / p: OutDir = C: \ slnbin \ $ (NomProjet)", mais cela ne fait que le traiter comme un littéral et créer un "$ (NomProjet)" réel. sous-répertoire

De préférence, je n’aurais pas à modifier chaque projet, etc.

Est-ce possible? Facile?

Était-ce utile?

La solution

Comme l’a dit John Saunders, vous devez disposer d’un fichier MSBuild principal qui gère le processus.

Voici un exemple d'utilisation de Tâches de la communauté MSBuild : GetSolutionProjects pour obtenir les projets. pour une solution donnée

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Package">

  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

  <!-- Specify here, the solution you want to compile-->
  <ItemGroup>
    <Solution Include="C:\slndir\solution.sln"/>
  </ItemGroup>

  <PropertyGroup>
    <Platform>AnyCPU</Platform>
    <Configuration>Debug</Configuration>

    <!-- Your deployment directory -->
    <DeployDir>C:\slbin\Deploy</DeployDir>
  </PropertyGroup>

  <!-- Gets the projects composing the specified solution -->
  <Target Name="GetProjectsFromSolution">
    <GetSolutionProjects Solution="%(Solution.Fullpath)">
      <Output ItemName="ProjectFiles" TaskParameter="Output"/>
    </GetSolutionProjects>
  </Target>

  <Target Name="CompileProject" DependsOnTargets="GetProjectsFromSolution">
    <!-- 
      Foreach project files
        Call MSBuild Build Target specifying the outputDir with the project filename.
    -->
    <MSBuild Projects="%(ProjectFiles.Fullpath)"
             Properties="Platform=$(Platform);
             Configuration=$(Configuration);
             OutDir=$(DeployDir)\%(ProjectFiles.Filename)\"
             Targets="Build">
    </MSBuild>
  </Target>
</Project>

Autres conseils

Vous devrez le faire "à la main". Créez un fichier de projet MSBUILD principal qui construit la solution, puis copie toutes les sorties de la solution où il le souhaite. C’est (à peu près) comme Visual Studio Team Build.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top