как лучше с зависимостями?
От: MadHuman Россия  
Дата: 02.12.22 08:11
Оценка:
Всех привествую!

Есть проект либа А, в неё подцеплен PackageReference (нугет пакет) на стороннюю либу Л, причем на конкретную версию Л.
Есть ещё наш проект Б, использует проект А, а внутри ему надо референс на либу Л туже что и в А.

Если явно в Б цеплять туже версию пакета Л что и в А, то когда в А версию Л изменят, надо изменить и в Б (на самом деле таких Б в солюшене много) поэтому это не удобно.
Есть ли способ такое организовать лучше чем в варианте выше? Чтоб в Б автоматом использовался референс на туже либу Л что и в А..
Re: Central Package Management
От: Qbit86 Кипр
Дата: 02.12.22 08:20
Оценка:
Здравствуйте, MadHuman, Вы писали:

MH>Есть ли способ такое организовать лучше чем в варианте выше? Чтоб в Б автоматом использовался референс на туже либу Л что и в А.


https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management
https://devblogs.microsoft.com/nuget/introducing-central-package-management/
https://blog.jetbrains.com/dotnet/2022/11/07/nuget-central-package-management-comes-to-jetbrains-rider/
Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 02.12.2022 8:22 Qbit86 . Предыдущая версия .
Re: как лучше с зависимостями?
От: vaa  
Дата: 02.12.22 09:16
Оценка:
Здравствуйте, MadHuman, Вы писали:

MH>Всех привествую!


MH>Есть проект либа А, в неё подцеплен PackageReference (нугет пакет) на стороннюю либу Л, причем на конкретную версию Л.

MH>Есть ещё наш проект Б, использует проект А, а внутри ему надо референс на либу Л туже что и в А.

MH>Если явно в Б цеплять туже версию пакета Л что и в А, то когда в А версию Л изменят, надо изменить и в Б (на самом деле таких Б в солюшене много) поэтому это не удобно.

MH>Есть ли способ такое организовать лучше чем в варианте выше? Чтоб в Б автоматом использовался референс на туже либу Л что и в А..

если корэ, то там можно в корне репозитория создать msbuild-вый таргетс и его уже инклудить во все проекты.
есть даже тулза такая paket, но можно и без нее.
в старом дотнете возможно также попробовать, но там как-то все сложно получается.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: как лучше с зависимостями?
От: Ночной Смотрящий Россия  
Дата: 02.12.22 09:29
Оценка:
Здравствуйте, MadHuman, Вы писали:

MH>Если явно в Б цеплять туже версию пакета Л что и в А, то когда в А версию Л изменят, надо изменить и в Б


Необязательно, по крайней мере если мажорная версия не менялась. Но будет варн при сборке.

MH>Есть ли способ такое организовать лучше чем в варианте выше? Чтоб в Б автоматом использовался референс на туже либу Л что и в А..


Есть. Вообще не референсить Л в Б.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: как лучше с зависимостями?
От: Xander Zerge Россия www.zerge.com
Дата: 02.12.22 09:59
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Есть. Вообще не референсить Л в Б.


А как?
Вот есть сторонняя либа Л, скажем какой-нить коннектор к данным, и его DTO внутри.
К ней написали набор расширений А, которым пользуется в том числе Б.
То есть Б потребляет DTO, которые рожаются в Л, но попадают через А.
Как не референсить Л? Разве что дублировать DTO из Л в А?
Серёжа Новиков,
программист
Re[3]: как лучше с зависимостями?
От: Ночной Смотрящий Россия  
Дата: 02.12.22 11:17
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

НС>>Есть. Вообще не референсить Л в Б.

XZ>А как?

Непонятен вопрос. Просто не прописываешь в проекте ссылку на L, только ссылку на А.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: как лучше с зависимостями?
От: Shmj Ниоткуда  
Дата: 02.12.22 11:21
Оценка:
Здравствуйте, MadHuman, Вы писали:

MH>Если явно в Б цеплять туже версию пакета Л что и в А, то когда в А версию Л изменят, надо изменить и в Б (на самом деле таких Б в солюшене много) поэтому это не удобно.


Framework или .NET? В Framework обычно достаточно разрешить использовать самую новую версию вот так:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>


Еще можно подумать над включением сборок в GAC.
Отредактировано 02.12.2022 11:23 Shmj . Предыдущая версия .
Re[4]: как лучше с зависимостями?
От: MadHuman Россия  
Дата: 02.12.22 11:47
Оценка: +1
НС>Непонятен вопрос. Просто не прописываешь в проекте ссылку на L, только ссылку на А.
присоединяюсь к аргументам предыдущего оратора, референсить так или иначе надо. так как методы А возвращают типы из Л, и их надо использовать в Б.
Re[4]: как лучше с зависимостями?
От: Xander Zerge Россия www.zerge.com
Дата: 03.12.22 08:14
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Непонятен вопрос. Просто не прописываешь в проекте ссылку на L, только ссылку на А.

Так мне из А вернут объект, описанный в L. Я как только вызов такого метода пропишу, мне компилятор скажет — включай L.
Серёжа Новиков,
программист
Re[5]: как лучше с зависимостями?
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.12.22 10:16
Оценка: +1
Здравствуйте, Xander Zerge, Вы писали:
XZ>Так мне из А вернут объект, описанный в L. Я как только вызов такого метода пропишу, мне компилятор скажет — включай L.
Хм. А кто-то ещё напрямую с компилятором такие темы обсуждает?
Я думал, что в 2022 все собирают через msbuild или dotnet CLI.
В обоих случаях транзитивные зависимости обслуживаются автоматически.
А требование сослаться на L возникает только тогда, когда не получается автоматически выбрать версию L, которая бы устроила и А и Б.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: как лучше с зависимостями?
От: Aquilaware  
Дата: 03.12.22 13:48
Оценка: +2
Здравствуйте, MadHuman, Вы писали:

MH>Если явно в Б цеплять туже версию пакета Л что и в А, то когда в А версию Л изменят, надо изменить и в Б


Совсем не обязательно. Во-первых, в Б цеплять Л зачастую необязательно, так как нужная версия будет подтягиваться автоматически. По-крайней мере так <PackageReference> работает в SDK-style проектах.

Во-вторых, можно в Б цеплять более новые версии Л, а в А исповедовать аскетичный консерватизм — цеплять минимальную и достаточную версию Л. Тогда всё происходит как по маслу без каких-либо лишних телодвижений со стороны того, кто использует А.
Re[5]: как лучше с зависимостями?
От: Aquilaware  
Дата: 03.12.22 13:54
Оценка: +2
Здравствуйте, MadHuman, Вы писали:

MH>присоединяюсь к аргументам предыдущего оратора, референсить так или иначе надо. так как методы А возвращают типы из Л, и их надо использовать в Б.


Это только в старых проектах .NET Framework так. Но если переехать на новые SDK-style проекты которые используются начиная с .NET Core, то там такие неявные зависимости подтягиваются автоматически и ссылаться явно на них не требуется. SDK-style проекты также умеют работать и с .NET Framework. Вот тулза для конвертации форматов проектов.
Re[6]: как лучше с зависимостями?
От: Xander Zerge Россия www.zerge.com
Дата: 03.12.22 14:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В обоих случаях транзитивные зависимости обслуживаются автоматически.

S>А требование сослаться на L возникает только тогда, когда не получается автоматически выбрать версию L, которая бы устроила и А и Б.
Хм. Надо попробовать. Точно помню, что было как-то дело, что билд не собирался, и там дело было не в версиях, а просто не хватало такой зависимости, и автоматически она не разруливалась.
Серёжа Новиков,
программист
Re[6]: как лучше с зависимостями?
От: MadHuman Россия  
Дата: 03.12.22 14:48
Оценка:
Здравствуйте, Aquilaware, Вы писали:


A>Это только в старых проектах .NET Framework так. Но если переехать на новые SDK-style проекты которые используются начиная с .NET Core, то там такие неявные зависимости подтягиваются автоматически и ссылаться явно на них не требуется. SDK-style проекты также умеют работать и с .NET Framework.

вот это интересно, спасибо. у меня старый проект .NET Framework, но думаю можно сконвертить его к sdk-стайл ничего не мешает, надо попробывать
Re[2]: как лучше с зависимостями?
От: Ночной Смотрящий Россия  
Дата: 03.12.22 18:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Framework или .NET? В Framework обычно достаточно разрешить использовать самую новую версию вот так:


Это инструкция для рантайма. А здесь речь про сборку.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: как лучше с зависимостями?
От: MadHuman Россия  
Дата: 05.12.22 16:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Хм. А кто-то ещё напрямую с компилятором такие темы обсуждает?

S>Я думал, что в 2022 все собирают через msbuild или dotnet CLI.
собирают из студии, студия как я понимаю и так msbuild запускает для этого, разве нет?
Re[7]: как лучше с зависимостями?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.12.22 16:59
Оценка:
Здравствуйте, MadHuman, Вы писали:

S>>Я думал, что в 2022 все собирают через msbuild или dotnet CLI.

MH>собирают из студии, студия как я понимаю и так msbuild запускает для этого, разве нет?
АФАИК, в студии свой сборщик, альтернативный msbuild-ному.
Но это неважно — в обоих случаях никто не вызывает csc.exe напрямую, скармливая ему список референсов.
Билд-системе скармливается целиковый файл проекта или солюшна, а уже она занимается резолвингом депендов и, в том числе, рекурсивными референсами при необходимости.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: как лучше с зависимостями?
От: MadHuman Россия  
Дата: 05.12.22 17:08
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>>>Я думал, что в 2022 все собирают через msbuild или dotnet CLI.

MH>>собирают из студии, студия как я понимаю и так msbuild запускает для этого, разве нет?
S>АФАИК, в студии свой сборщик, альтернативный msbuild-ному.
нет, студия пользуется именно msbuild

S>Но это неважно — в обоих случаях никто не вызывает csc.exe напрямую, скармливая ему список референсов.

S>Билд-системе скармливается целиковый файл проекта или солюшна, а уже она занимается резолвингом депендов и, в том числе, рекурсивными референсами при необходимости.
да, студия запускает msbuild для билда солюшена, и если в проекте (старого формата) нет было референса на либу Л (как в стартовом топике), то возникала ошибка компиляции (ну и естественно при билде).
я не вызываю руками csc.exe напрямую, речь шла о штатном процессе сборки солюшена через студию.
как уже тут посоветовали, если обновить формат проект на новый sdk-style то действительно становится не нужным руками подцеплять транзитивный референс Л в проекте Б, оно при сборке само разруливается.
Re[9]: как лучше с зависимостями?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.12.22 17:38
Оценка:
Здравствуйте, MadHuman, Вы писали:
S>>АФАИК, в студии свой сборщик, альтернативный msbuild-ному.
MH>нет, студия пользуется именно msbuild
Ну... У меня есть проект, который существенно по-разному собирается из студии по Ctrl+Shift+B и через msbuild command prompt.
Даже разными компиляторами. Поэтому позволю себе усомниться.

MH>да, студия запускает msbuild для билда солюшена, и если в проекте (старого формата) нет было референса на либу Л (как в стартовом топике), то возникала ошибка компиляции (ну и естественно при билде).

MH>я не вызываю руками csc.exe напрямую, речь шла о штатном процессе сборки солюшена через студию.
MH>как уже тут посоветовали, если обновить формат проект на новый sdk-style то действительно становится не нужным руками подцеплять транзитивный референс Л в проекте Б, оно при сборке само разруливается.
Да, это удобнее, хотя и не факт, что лучше — вдруг кому-то захочется иметь явный контроль за всеми зависимостями, которые тянутся в проект.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.