MSBuild Batching - не могу понять, как заставить цель работать только для некоторых решений - PullRequest
1 голос
/ 27 октября 2009

У меня есть что-то подобное в моем TFSBuild.proj

<ItemGroup>
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln" />
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " />
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " />
    <ConfigurationToBuild Include="Release|x86">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>x86</PlatformToBuild>
    </ConfigurationToBuild>

    <ConfigurationToBuild Include="Release|x64">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>x64</PlatformToBuild>
    </ConfigurationToBuild>
</ItemGroup>  

Я хочу переопределить цель BeforeCompile для запуска пользовательской задачи, которую я написал. Пользовательская задача получит выходные данные из ProjectA и файл сборки, который используется в обоих проектах программы установки (файлы проекта Wix). Как получить цель BeforeCompile для выполнения только для этих двух элементов SolutionToBuild? Я предполагаю, что речь идет о целевом пакетировании (потому что тогда я могу использовать условия для своей задачи, но я не получаю его.

Я попытался добавить что-то подобное, чтобы посмотреть, будет ли это работать, но в журнал выводится только первое решение:

<Target Name="BeforeCompile" Outputs="%(SolutionToBuild.Identity)">
  <Message Text="Solution being built: %(SolutionToBuild.Identity)" />
</Target>

1 Ответ

3 голосов
/ 28 октября 2009

Почему бы вам не скомпилировать ProjectA и не подготовить необходимые файлы перед тем, как приступить к фактической установке WiX?

<ItemGroup>
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " />
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " />
        <ConfigurationToBuild Include="Release|x86">
                <FlavorToBuild>Release</FlavorToBuild>
                <PlatformToBuild>x86</PlatformToBuild>
        </ConfigurationToBuild>

        <ConfigurationToBuild Include="Release|x64">
                <FlavorToBuild>Release</FlavorToBuild>
                <PlatformToBuild>x64</PlatformToBuild>
        </ConfigurationToBuild>
</ItemGroup>

<Target Name="BeforeCompile">
  <MsBuild Projects="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln"/>
  <CallTarget Targets="PrepareWiXFiles"/>
</Target>

Таким образом, вам не нужно будет выполнять грязную проверку имен.

Гораздо лучший подход - разделить эту сборку на несколько небольших, что улучшит удобство обслуживания. Например, вы можете создать одну сборку, которая будет собирать ProjectA и сохранять его выходные данные в сетевом расположении (или локальном). Затем вы создаете вторую сборку, которая будет собирать выходные данные ProjectA, подготовить файлы WiX и собрать установщик Wix.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...