Упаковка веб-проектов с MSBuild - PullRequest
3 голосов
/ 06 июня 2011

У меня есть решение с 5 веб-проектами, и я хочу, чтобы они были упакованы, поэтому я запускаю msbuild mysolution.sln /t:Package после сборки и получаю следующее:

C: \ mysolution.sln.metaproj: ошибка MSB4057:целевой "Package" не существует в проекте.

Если я упаковываю каждый из проектов по одному, все в порядке.Это глупо и неестественно, я не хочу иметь 5 дополнительных шагов в процессе CI.Что такого особенного в Package target, что MSBuild не может выполнить его как обычный Build или Clean?А что такое * .sln.metaproj?

Ответы [ 2 ]

5 голосов
/ 06 июня 2011

Файл .sln.metaproj автоматически генерируется MSBuild при попытке создать файл решения. Этот файл создан, потому что файлы решения не являются проектами MSBuild. В этом сгенерированном файле автоматически создаются стандартные тэты Build, Clean и т. Д., Но не Package. Лучше всего перейти от использования файла решения к использованию файла MSBuild, который ссылается на проекты. Это может выглядеть примерно так:

<Project ...>
   <ItemGroup>
      <Project Include="Project1.csproj" />
      <Project Include="Project2.csproj" />
      <Project Include="Project3.csproj" />
      <Project Include="Project4.csproj" />
      <Project Include="Project5.csproj" />
   </ItemGroup>
   <Target Name="Package">
      <MSBuild
         Projects="@(Project)"
         Targets="Package"
         Properties="Configuration=$(Configuration);Platform=$(Platform);..."
         />
   </Target>
   ...etc. for Build, Clean etc.
</Project>

Вы также можете добавить заглушку «makefile project» с именем что-то вроде «Package All» в ваше решение, которое вызывает MSBuild непосредственно в проекте msbuild, как описано выше. Сборка этого проекта makefile будет выполнять шаг пакета.

FYI, чтобы увидеть сгенерированный metaproj, задайте для переменной среды MSBuildEmitSolution значение «1» и запустите сборку, временный файл будет сохранен.

0 голосов
/ 14 сентября 2016

В TeamCity я добавляю в сборку параметры командной строки /p:IsPackaging=true

...