Как включить вывод проекта в развертывание msbuild из проекта, созданного впоследствии - PullRequest
0 голосов
/ 14 февраля 2020

Я работаю с NopCommerce. Фреймворк построен таким образом, что позволяет создавать плагины как дополнительные проекты в решении. Эти проекты должны ссылаться на «Ядро», которое, по сути, является развернутым веб-сайтом MVC.

Из-за природы msbuild, я не могу придумать, как (без хаков) получить выходные данные сборки проектов плагинов (файлы dll) для включения в развертывание базовой сборки, поскольку плагины требуются для сначала создайте ядро.

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

Я пытался сделать следующее с msbuild в файле csproj сайта:

<Target Name="NopTarget" AfterTargets="Build">
    <ItemGroup>
      <BuildPlugins Include="..\..\Plugins\**\*.csproj" />
    </ItemGroup>

    <Message Text="directory: @(BuildPlugins)" Importance="HIGH" />

    <MSBuild Projects="@(BuildPlugins)" />

    <ItemGroup>
      <NopPlugins Include="$(MSBuildProjectDirectory)\Plugins\**\*.*" />
    </ItemGroup>

    <Message Text="@(BuildPlugins)" Importance="HIGH" />
    <Message Text="After Build Plugin Copy - @(NopPlugins) - $(TargetDir)\%(RecursiveDir)" Importance="HIGH" />

    <Copy SourceFiles="@(NopPlugins)" DestinationFolder="$(TargetDir)\Plugins\%(RecursiveDir)" />

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

(К вашему сведению, я работаю над параметризованным развертыванием для использования с Azure Devops)

1 Ответ

0 голосов
/ 17 февраля 2020

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

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

Согласно вашему сценарию, ваш core проект и plugins проект не находятся на одном уровне каталогов. Таким образом, ваша задача nuget/dotnet restore должна запускаться дважды для восстановления пакетов для обоих двух проектов отдельно, если проект plugins не определен в файле xx.sln.

Если ваш проект нацелен на .net framework, используйте задачу восстановления nuget или используйте команду восстановления в use. net основная задача , если ваши проекты нацелены на .net core/standard. Просто убедитесь, что вы восстановили пакеты для всех проектов.

...