Запустите MSBuild, уважайте выгруженные проекты - PullRequest
10 голосов
/ 24 ноября 2010

В Visual Studio вы можете выгрузить проект, и когда вы создаете решение (щелчок правой кнопкой мыши / сборка), выгруженный проект не создается.Однако, когда вы запускаете MSBuild из командной строки, вот так:

C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe 
  "$slnFile" /t:build /p:Configuration=Debug /verbosity:minimal

проект является встроенным.Есть ли способ заставить MSBuild уважать проекты, выгруженные в Visual Studio?

Ситуация такова, что у нас есть решение с несколькими проектами.Для одного из них требуется специальное программное обеспечение, которое существует на нашей сборочной машине, но не на всех машинах разработчика.Это означает, что я не могу сделать прямую сборку из командной строки, или она терпит неудачу, когда сталкивается с мошенническим проектом.

Есть идеи?

[РЕДАКТИРОВАТЬ: MSBuild должен быть в состоянии сделать это, потому что Visual Studio использует MSBuild для создания.Что делает VS, чего не делает командная строка?]

Ответы [ 3 ]

6 голосов
/ 24 ноября 2010

MSBuild ничего не знает о состоянии загрузки проекта в решении, поэтому то, что вы пытаетесь сделать, невозможно.

В качестве альтернативы вы можете определить новую конфигурацию сборки с именем BUILD_MACHINE. (используя меню Build -> Configuration Manager).В этой конфигурации сборки разрешите сборку всех ваших проектов.Тогда это конфигурация, которую вы строите на своих компьютерах.Если вы отключите сборку конкретного проекта в конфигурациях сборки Debug и Release (используя те же опции меню), вы можете построить эти конфигурации на компьютере разработчика, не выгружая проектвы не хотите собирать.

MSBuild учитывает конфигурации сборки, поэтому вы можете создавать конфигурации сборки, не связанные с машиной (например, Debug, Release), используя Visual Studio или MSBuild, и проблемный проект не будет собран.

1 голос
/ 08 ноября 2011

Возможное решение - использовать devenv /build ConfigurationName file.sln вместо MSBuild напрямую.

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

1 голос
/ 24 ноября 2010

информация о том, выгружен проект или нет, попадает не в файл sln, а в файл xxx.user.Следовательно, MSBuild об этом не знает.

Лучше всего создать простой файл MSBuild, содержащий только те проекты, которые можно построить везде, например:

<!--build selection of projects-->
<Project
  ToolsVersion="3.5"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <DevMachine Include="A\b.vcproj"/>
    <DevMachine Include="B\b.vcproj"/>
    <DevMachine Include="C\c.vcproj"/>
  </ItemGroup>

  <ItemGroup>
    <BuildMachine Include="D\d.vcproj"/>
    <BuildMachine Include="E\e.vcproj"/>
  </ItemGroup>

  <Target Name="All">
    <CallTarget Targets="MakeDevMachine"/>
    <CallTarget Targets="MakeBuildMachine"/>
  </Target>

  <Target Name="MakeDevMachine">
    <VCBuild
      Projects="@(DevMachine)"
    />
  </Target>

  <Target Name="MakeBuildMachine">
    <VCBuild
      Projects="@(BuildMachine)"
    />
  </Target>

</Project>

Только выводВы должны синхронизировать его с файлом решения.

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