Используйте MSBuild для создания нескольких решений и копирования приложений в отдельные папки. - PullRequest
0 голосов
/ 10 мая 2018

У меня есть около 80 консольных приложений, которые я хочу создать и вывести в отдельные целевые каталоги в каталоге хранения.

c:\builds
  /App1
  /App2
  /app3

Этот сценарий выполняет массовую сборку, но я не могу заставить его скопировать готовый вывод из каталога выпуска в целевой каталог или отправить его туда напрямую.

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
    <Solution Include="./**/*.sln"> 
            <Properties>Configuration=Release;Platform=Any CPU</Properties>
    </Solution>
    <MyReleaseFiles Include=".\bin\release\*.*" Exclude=".\bin\release\*vshost.exe" />
    </ItemGroup>

    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <MyReleaseOutput>.\release</MyReleaseOutput>
        <OutputPath>c:\builds\$(AssemblyName)\</OutputPath>
        <OutDir>$(OutputPath)</OutDir>
    </PropertyGroup>

    <Target Name="Build">
        <MSBuild Projects="@(Solution)" BuildInParallel="true" Targets="Build" />
        <MakeDir Directories="$(OutputPath)" />
        <Copy SourceFiles="@(MyReleaseFiles)" DestinationFolder="$(OutputPath)" />
    </Target>

 </Project>

1 Ответ

0 голосов
/ 10 мая 2018

Использование MSBuild для создания нескольких решений и копирования приложений в отдельные папки

Так же, как Стийн сказал: " То, что OutputPath должен быть установлен в проекте, который получает сборку, только там он может оценивать $ (AssemblyName) в контексте проекта. ", поэтому мы не могли использовать это прямо из файла проекта.

В качестве обходного пути вы можете использовать ItemGroup с Subfolder для каждого проекта:

  <ItemGroup>
    <Projects Include="project1.csproj" />
      <Subfolder>project1</Subfolder>
    <Projects Include="project2.csproj" />
      <Subfolder>project2</Subfolder>
    <Projects Include="project3.csproj" >
      <Subfolder>project3</Subfolder>
    </Projects>
  </ItemGroup>

Затем используйте %(Projects.Subfolder) для каждого OutputPath:

  <Target Name="_BuildSingleConfiguration">

    <MSBuild Projects="@(Projects)"
             BuildInParallel="true"
             Properties="Configuration=$(Configuration);OutputPath=%(Projects.BuildOutputPath)\%(Projects.Subfolder)" />
  </Target>

Сертифицировано: Как назначить разный OutputPath для проекта для конфигурации сборки с MSBuild?

Надеюсь, это поможет.

...