Frage

Ich habe eine normale SLN-Datei, und ich bin es gut mit msbuild von der Kommandozeile zu kompilieren. Ich tue dies:

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

Und es Dumps alles in C: \ slnbin, mit Ausnahme von Websites, auf der C eingesetzt bekommen. \ Slnbin_PublishedWebsites \

Was würde Ich mag nur alle nicht haben die Binärdateien im Binärverezichnis fallen gelassen, sondern auch jedes executeable Programm über eine eigene „entfalteten“ -Ordner, ähnlich dem, was jeder Website bekommt.

So zum Beispiel, wenn ich die folgenden Projekte:  - Verbreitet  - Lib1  - Service1  - Lib2  - Service2

Ich wan zu bekommen:

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

Ich habe versucht, Dinge zu tun wie "msbuild / p: OutDir = C: \ slnbin \ $ (Projektname)", aber es behandelt sie wie eine wörtliche und schafft einen tatsächlichen "$ (Projektname)" subdir.

Vorzugsweise würde ich nicht jedes einzelne Projekt ändern müssen und so weiter.

Ist das möglich? Einfach?

War es hilfreich?

Lösung

Wie John Saunders sagte, benötigen Sie einen Master MSBuild-Datei haben, die den Prozess behandelt.

Hier ist ein Beispiel unter Verwendung von MSBuild Community-Aufgaben : GetSolutionProjects , dass die Projekte bekommt für eine gegebene Lösung

<?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>

Andere Tipps

Sie müssen diese „von Hand“ tun. Erstellen Sie eine Master MSBUILD Projektdatei, die die Lösung baut, kopiert dann alle Ausgänge Lösung, wo sie sie haben wollen. Dies ist (grob), wie Visual Studio Team Build tut es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top