Как сначала построить зависимый проект с помощью msbuild - PullRequest
5 голосов
/ 16 марта 2012

Я только начал изучать msbuild, потому что хочу создать свои собственные сценарии сборки.На данный момент я могу создавать сценарии сборки, которые компилируют только один проект, но как мне обрабатывать зависимости?

Например, что если у меня есть два проекта, которые собираются с этими двумя сценариями msbuild?

  1. projectA.xml
  2. projectB.xml

Как мне сообщить msbuild, что когда я выполняю projectB.xml, он должен сначала выполнить projectA.xml?

Я много гуглил по этому вопросу, но, похоже, ничего не понял, что понимает такой стартер, как я.Я был бы более чем доволен ссылкой на статью, описывающую это, или, возможно, просто небольшим примером кода.

Причина, по которой я хочу этот элемент управления, заключается в библиотеке, которую я создаю.Библиотека состоит из нескольких проектов.Разработчик должен иметь возможность извлекать исходный код библиотеки и создавать только те библиотеки, которые ему нужны.

На самом деле я хочу иметь возможность создавать модули .net из разных проектов.Вот почему я хочу иметь возможность запускать собственный скрипт msbuild.

Ответы [ 4 ]

6 голосов
/ 16 марта 2012

Если вы создаете решение с двумя проектами, вы можете нацелить файл .sln с помощью msbuild, а не напрямую строить проекты, он должен позаботиться о зависимостях проекта:)

Но это еслиВы используете стандартные проекты .csproj ...

Хорошо, я посмотрел проект, над которым я работаю, и он выглядит так:

<ItemGroup>
   <ProjectReference Include="..\SomeFolder\SomeProject.csproj">
      <Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project>
      <Name>SomeProjectNamespace</Name>
   </ProjectReference>
</ItemGroup>

А вот страница MSDN о ссылках.Прокрутите вниз, пока не найдете ProjectReference ...

3 голосов
/ 16 марта 2012

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

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

  <!-- ************************************************************************************************ -->
  <!-- Targets that run the builds -->
  <!-- ************************************************************************************************ -->
  <Target Name="AutoBuild" DependsOnTargets="BuildProject1;BuildProject2;BuildInstallers">
    <OnError ExecuteTargets="NotifyFailure" />
  </Target>
  <Target Name="FullCompile" DependsOnTargets="BuildProject1;BuildProject2">
    <OnError ExecuteTargets="NotifyFailure" />
  </Target>

  <!-- Build Project 1 -->
  <Target Name="BuildProject1">
    <!-- Use MSBuild task and point it to build project1.csproj, project1.sln or whatever your projects is -->
  </Target>

  <!-- Build Project 2 -->
  <Target Name="BuildProject2">
    <!-- Use MSBuild task and point it to build project2.csproj, project2.sln or whatever your projects is -->
  </Target>

  <Target Name="BuildInstallers">
    <!-- Whatever logic you have for building installers -->
  </Target>

</Project>
0 голосов
/ 24 апреля 2019

В MSBuild проблема # 2887 обсуждается похожая ситуация. В ветке также раскрывается ссылка на официальный ProjectReference протокол .

0 голосов
/ 16 марта 2012

Вам не нужно строить с использованием sln.Если вы используете ссылки на проекты в своем csproj, то порядок зависимостей позаботится MSBuild.Попытайся.Automajically.Вам не нужно сортировать порядок зависимостей в вашем скрипте msbuild.

...