msbuild SLN и по-прежнему получать отдельные результаты проекта?

StackOverflow https://stackoverflow.com/questions/628739

Вопрос

У меня есть обычный SLN-файл, и я нормально компилирую его с помощью msbuild из командной строки.Я делаю это:

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

И это выгружает все в C:\slnbin, за исключением веб-сайтов, которые развертываются в C:\slnbin_PublishedWebsites\.

Чего бы я хотел, так это чтобы не только все двоичные файлы были удалены в каталог bin, но и чтобы у каждой исполняемой программы была своя собственная "развернутая" папка, аналогичная той, которую получает каждый веб-сайт.

Так, например, если у меня есть следующие проекты:- Общий - Библиотека 1 - Сервис 1 - Библиотека 2 - Сервис 2

Я хочу получить:

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

Я пытался делать что-то вроде "msbuild /p:OutDir=C:\slnbin \$ (ProjectName)", но он просто обрабатывает это как литерал и создает фактический вложенный каталог "$ (ProjectName)".

Предпочтительно, чтобы мне не пришлось изменять каждый отдельный проект и так далее.

Возможно ли это?Легко?

Это было полезно?

Решение

Как сказал Джон Сондерс, у вас должен быть главный файл MSBuild, который обрабатывает этот процесс.

Вот пример использования Задачи сообщества MSBuild : Getsolutionпроекты это позволяет получить проекты для данного решения

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

Другие советы

Вам придется сделать это "вручную".Создайте главный файл проекта MSBUILD, который создает решение, затем скопируйте все выходные данные решения туда, где они нужны.Вот (примерно) как это делает Visual Studio Team Build.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top