#c# #.net-core #nuget #dotnet-publish
Вопрос:
Каково ожидаемое поведение при создании/публикации разных независимых проектов .csproj в одной папке с использованием dotnet publish
?
Представьте, что для этого Alpha.csproj
может потребоваться пакет NuGet foo
версии 1.0.0, и для этого проекта Bravo.csproj
может потребоваться версия 2.0.0 той же зависимости NuGet. Меня беспокоит то, что два отдельных dotnet publish
вызова в этих разных проектах, направленных в одну и ту же целевую папку, приведут к foo
перезаписи зависимости…таким образом, нарушается развертывание.
Я знаю, что NuGet часто хранит свои двоичные файлы во вложенных папках, часто отличающихся номерами версий, но также часто он помещает зависимости непосредственно в основную папку публикации. Таким образом, по номинальной стоимости есть место для неожиданных конфликтов.
До сих пор я решал эту ожидаемую проблему таким образом, чтобы поместить оба проекта в одно и то же решение, а затем опубликовать решение. Я полагаю, что одна команда публикации достаточно умна, чтобы устранить различия (хранить разные версии зависимостей foo
в разных подпапках). Однако, что, если эти проекты находятся в разных решениях?
Я говорю «ожидаемая» проблема, потому что на самом деле я не тратил время на ее решение. У меня сжатые сроки, и я не могу позволить себе иметь дело с потенциально неясными ошибками, возникающими во время выполнения; Я не хочу находить ответ на свой вопрос «трудным путем».
Понимание этой динамики особенно важно для меня, потому что я создаю плагины .Net Core 3.1, которые я хотел бы опубликовать/развернуть в существующей папке платформы. Приложение предназначено для поиска новых плагинов и их загрузки.
Комментарии:
1. Когда два проекта находятся в одном и том же решении, building разберется в зависимостях (и будет использовать более позднюю версию библиотеки). Но с двумя проектами в разных решениях, я думаю, вам не повезет. Аналогично, если зависимости
foo
v1.0.0 и v2.0.0 имеют несовместимые изменения.
Ответ №1:
Ожидаемое поведение заключается в том, что последний опубликованный проект перезапишет существующие файлы в каталоге публикации и, таким образом, может привести к конфликтам версий зависимостей.
У однофайловых развертываний больше шансов избежать конфликта при публикации в одном каталоге за счет большего общего размера развертывания.
Комментарии:
1. Я ошеломлен тем, что, насколько я могу судить, никакая документация MS не объясняет это слишком важное поведение. Меня раздражает, что мое основное консольное приложение «платформа плагинов» в моем решении VS должно иметь зависимости на уровне проекта от плагинов, просто чтобы гарантировать отсутствие конфликтов сборки. Я бы очень предпочел, чтобы плагины можно было публиковать независимо. Тем не менее, возможно, я мог бы найти решение, если бы плагины публиковались во вложенных папках, а не в основной папке. Я займусь этим, когда найду время.