Ссылка на проект VS NuGet
Как мне ссылаться на другого project A
от project B
в том же решении?
Что я получу и что я потеряю, если я:
- Добавить ссылку на
project A
в качестве ссылки на проект. - Установите пакет NuGet
project A
вproject B
,
Вещи, которые меня беспокоят, это зависимости сборки, управление версиями..?
Или это полностью разрушает цель решения?
4 ответа
При первом подходе вы получаете простоту, так как вам не нужно генерировать новую версию пакета nuget ProjectA, каждое изменение, которое вы вносите в него (например, ProjectA.nupkg).
Однако при втором подходе вы получаете мобильность, так как вы легко можете использовать тот же пакет nuget для других проектов / решений.
Лично я создаю пакеты nuget только для проектов, цель которых - поделиться с другими решениями. (Например, библиотеки и рамки).
Надеюсь, это поможет вам решить!
Ссылка на проект VS NuGet
Ссылка на проект или NuGet - очень распространенная проблема в нашем процессе разработки, нам нужно выбрать, какой из них использовать, исходя из нашей реальной ситуации.
Например, если ссылочный проект A часто изменяется в процессе разработки, мы рекомендуем использовать ссылку Project. Потому что, если вы используете nuget, вам нужно пересобрать упомянутый проект, воссоздать пакет nuget, переустановить этот пакет nuget в проект B, даже если вам придется опубликовать его на сервере. Это принесет много ненужной работы, и мы часто забываем обновить наш пакет nuget после того, как изменим ссылочный проект A. Если вы используете ссылку на проект, у вас не будет этих проблем. Измененный ссылочный проект A будет автоматически обновлен до того, как мы построим проект B.
С другой стороны, когда мы делимся ссылочным проектом А из решения или передаем этот проект другим, лучшим выбором будет Nuget. У него больше мобильности.
Таким образом, ссылка на проект будет рекомендована, когда вы ссылаетесь на другой проект A из проекта B в том же решении, нюгет более подходит, когда вы делитесь ссылочным проектом из решения или делитесь проектом с другими.
Кроме того, имеется расширение https://github.com/rsuter/NuGetReferenceSwitcher для Visual Studio, которое автоматически переключает ссылки на сборки NuGet на ссылки на проекты и наоборот.
Надеюсь это поможет.
В настоящее время с новым форматом csproj вы можете использовать оба одновременно (если у вас есть оба проекта в одном решении).
В вашем примере вы могли бы ссылаться project A
от project B
в качестве ссылки на проект. Тогда, если вы хотите выпустить project A
как пакет NuGet, вам просто нужно добавить следующий тег в его csproj внутри PropertyGroup
:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Сюжетный поворот: если вы хотите выпустить project B
как пакет NuGet тоже просто добавьте GeneratePackageOnBuild
target - MSBuild установит projectA.nupkg
как зависимость в projectB.nupkg
,
Таким образом, вы можете внутренне работать со своими проектами, в то же время выпуская их как пакеты третьим лицам или другим командам.
Вы можете использовать как ссылки на проект во время разработки (быстрее), так и ссылки на пакеты во время производства.
В вашей.csproj
файл проекта:
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<ProjectReference Include="../../../Library1/Library1.csproj" />
<ProjectReference Include="../../../Library2/Library2.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'!='Debug'">
<PackageReference Include="Library1" Version="1.0.0" />
<PackageReference Include="Library2" Version="1.0.0" />
</ItemGroup>
В разработке: проект скомпилирован в режиме отладки, поэтому будет использоваться ссылка на проект.
В производстве (сервер CI, контейнер докеров): проект скомпилирован в режиме выпуска, поэтому будет использоваться ссылка на пакет.