Публикация в Dotnet в той же папке

#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 должно иметь зависимости на уровне проекта от плагинов, просто чтобы гарантировать отсутствие конфликтов сборки. Я бы очень предпочел, чтобы плагины можно было публиковать независимо. Тем не менее, возможно, я мог бы найти решение, если бы плагины публиковались во вложенных папках, а не в основной папке. Я займусь этим, когда найду время.