Доставка проектов в виде пакетов NuGet в зависимости друг от друга - PullRequest
0 голосов
/ 16 июня 2019

У меня есть три проекта, которые я строю

  • FooBar.Abstractions
  • FooBar.AspNetCore
  • FooBar.AspNetCore.IntegrationTesting

Проекты FooBar.AspNetCore и FooBar.AspNetCore.IntegrationTesting имеют ссылки на FooBar.Abstractions. Я хочу упаковать и отправить все три из них как отдельные пакеты NuGet.

Я начал с NuGet.config файла, который выглядит локально так:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
      <add key="aspnetcore_abstractions" value="./src/FooBar.Abstractions/bin/Debug/" />
  </packageSources>
</configuration>

Затем я добавляю пакет в мои проекты

  <ItemGroup>
    <PackageReference Include="FooBar.Abstractions" Version="2.0.0-preview1" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
  </ItemGroup>

Это действительно отстой, хотя каждый раз, когда я делаю изменения в проекте FooBar.Abstractions, я должен зайти в папку C: \. Nuget \ packages и удалить кэш, прежде чем мой проект FooBar.AspNetCore сможет восстановить только что скомпилированную версию. из моего решения.

Если я просто добавлю FooBar.Abstractions в качестве ссылки на проект, а затем отправлю два пакета на NuGet.org, как это повлияет на пользователей, которые устанавливают эти два пакета в разные проекты в своих решениях. NuGet и .Net понимают все это, зная, что это одна и та же сборка? Я предполагаю, что в этом случае проект FooBar.AspNetCore будет поставляться с FooBar.Abstractions.dll, если я добавлю его в качестве ссылки на проект.

Я не знаю, вызывает ли это конфликты, зная, что пакет поставляет этот .dll, тогда клиент явно устанавливает пакет Abstractions, содержащий ту же самую DLL.

Как вы справляетесь с этим с помощью упаковки NuGet с новейшими версиями NuGet? Как заставить FooBar.AspNetCore использовать одну и ту же версию FooBar.Abstractions.dll между ссылкой на пакет и пакетом NuGet, который будут установлены другими? Я не могу принудительно установить PackageReference Include="FooBar.Abstractions" Version="2.2", если вместо этого добавляю его в качестве ссылки на проект?

1 Ответ

1 голос
/ 16 июня 2019

Когда вы упаковываете проект по ссылке на проект, NuGet преобразует ссылку на проект в зависимость NuGet. Он вычисляет версию зависимости, основываясь на том, какой версией был бы этот проект, если бы он был упакован. Нет необходимости использовать PackageReference при упаковке. Как вы обнаружили / объяснили, это значительно усложняет местное развитие.

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

...