Разграничение зависимостей
От: -n1l-  
Дата: 09.06.15 05:38
Оценка:
Добрый день увыжаемые коллеги, снова меня мучает архитектурный вопрос.
Представьте, что у вас есть библиотека с api, которая работает с другой библиотекой из опенсорса.
Вы хотите что бы пользователь, который будет использовать ваше апи не интересовался ее зависимостями, что бы он просто подключал вашу библиотеку и все.
Как это сделать правильно? Скорее всего такое сделать невозможно, если не брать исходники самой библиотеки и не включать их в свою реализацию, но это немного не то.
Подскажите пожалуйста.
Re: Разграничение зависимостей
От: -n1l-  
Дата: 09.06.15 05:44
Оценка:
Вот в с++ есть статическая линковка, то что нужно было бы.
Re: Разграничение зависимостей
От: Doc Россия http://andrey.moveax.ru
Дата: 09.06.15 05:48
Оценка: 2 (1) +3
Здравствуйте, -n1l-, Вы писали:

Сделать NuGet пакет, который сам подтянет остальные зависимости? В результате все что надо будет для установки это выполнить
install-package [YourLibPackageName]
Re[2]: Разграничение зависимостей
От: rameel https://github.com/rsdn/CodeJam
Дата: 09.06.15 06:05
Оценка: 2 (1) +1
Здравствуйте, -n1l-, Вы писали:

N>Вот в с++ есть статическая линковка, то что нужно было бы.


Посмотри ILMerge
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: Разграничение зависимостей
От: rameel https://github.com/rsdn/CodeJam
Дата: 09.06.15 06:14
Оценка: 2 (1) +1
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, -n1l-, Вы писали:


N>>Вот в с++ есть статическая линковка, то что нужно было бы.


R>Посмотри ILMerge


Или можно заморочиться по другому, встроить нужную библиотеку в ресурсы и подгружать ее подписавшись на AssemblyResolve текущего AppDomain. Кода там на пару строчек.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[4]: Разграничение зависимостей
От: Sinix  
Дата: 09.06.15 06:57
Оценка: 3 (2)
Здравствуйте, rameel, Вы писали:

R>>Посмотри ILMerge

R>Или можно заморочиться по другому, встроить нужную библиотеку в ресурсы и подгружать ее подписавшись на AssemblyResolve текущего AppDomain. Кода там на пару строчек.
Это не решение. Во-первых, возможное нарушение лицензии (с LGPL могут быть проблемы).
Во-вторых, грабли с load context/ресурсными сборками.
В-третьих, вспомогательная библиотека, завязанная на AssemblyResolve… вам точно хочется таких приключений?

Правильный ответ — использовать nuget (можно свой хост) и не мучаться. Его именно для этого и сделали.
Re[5]: Разграничение зависимостей
От: rameel https://github.com/rsdn/CodeJam
Дата: 09.06.15 12:19
Оценка: 2 (1) +2
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, rameel, Вы писали:


R>>>Посмотри ILMerge

R>>Или можно заморочиться по другому, встроить нужную библиотеку в ресурсы и подгружать ее подписавшись на AssemblyResolve текущего AppDomain. Кода там на пару строчек.
S>Это не решение. Во-первых, возможное нарушение лицензии (с LGPL могут быть проблемы).

Это понятно, только вопрос лицензии — это уже отдельный вопрос.

S>Во-вторых, грабли с load context/ресурсными сборками.

S>В-третьих, вспомогательная библиотека, завязанная на AssemblyResolve… вам точно хочется таких приключений?

Ага, есть проблема с ресурсными сборками, об этом надо знать. Но если их нет, то и проблем с ними тоже нет — Кеп. А грабли с контекстом могут возникнуть только если грузить через Assembly.Load(byte[]), да и то в простых случаях на эти грабли тяжело наступить.

S>Правильный ответ — использовать nuget (можно свой хост) и не мучаться. Его именно для этого и сделали.


Полностью согласен. Изначально я отвечал на вопрос о технической возможности внедрения сборки, глаз зацепился за статическую линковку, отсюда и ответ. Сейчас посмотрел главный вопрос топикстартера, и да, ответ — использовать nuget.

ЗЫ. Вообще, у нас в проекте есть несколько самописных утилиток, некоторые из них используют нашу же вспомогательную сборку. Для удобства мы когда-то очень давно воспользовались ilmerge, чтобы эти утилиты были представлены в виде отдельных самодостаточных файлов. А так как ресурсных сборок они не содержат, то и проблем с ними нет, плюс маааааленькая плюшка в виде наличия только одного файлика вместо 2-3.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.