выходной путь решения структуры по проекту - PullRequest
1 голос
/ 10 февраля 2012

Я создаю визуальное студийное решение с помощью msbuild

msbuild.exe my.sln

Таким образом, он выводит все в пути вывода, указанные в каждом проекте (по умолчанию bin \), но в этом случае мне нужно, чтобы все выходные артефакты были в другой папке, используемой для упаковки. Если я бегу

msbuild.exe my.sln /p:OutputhPath=<someFolder>

Тогда все артефакты окажутся в указанной папке, но структура будет плоской. Я бы хотел, чтобы это было:

\package
    \project1
    \project2
    ...

Но я не могу придумать хороший способ сделать это, не изменяя отдельные файлы проекта (что почти не обсуждается). Есть идеи? (msbuild 4.0, VS2010 - если что-то изменится)

1 Ответ

2 голосов
/ 10 февраля 2012

Возможно, есть лучший способ, но одну вещь, которую вы могли бы сделать, это создать на месте с msbuild.exe my.sln, а затем скопировать выходные данные в ваш \package каталог, чтобы вы сохранили иерархию.Это должно быть довольно просто сделать.Вы можете использовать это как отправную точку:

<Target Name="Package">
    <PropertyGroup>
      <SourceFolder>$(MSBuildProjectDirectory)\src</SourceFolder>
      <TargetFolder>$(MSBuildProjectDirectory)\package</TargetFolder>
    </PropertyGroup>

    <ItemGroup>
      <FilesToCopy Include="$(SourceFolder)\**\bin\Debug\**\*.*" />
    </ItemGroup>

    <!-- Recursive copy w/o flattening folder structure: -->
    <Copy 
        SourceFiles="@(FilesToCopy)" 
        DestinationFiles="@(FilesToCopy->'$(TargetFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
      />
  </Target>

Вы также можете определить свойство для отслеживания конфигурации вашей сборки и заменить жестко закодированный bin\Debug на bin\$(BuildConfig).

...