Как из bin сделать dll

Как из bin сделать dll
Как из bin сделать dll
Как из bin сделать dll
Как из bin сделать dll
Как из bin сделать dll

Если у вас есть следующая цепочка зависимостей: Lib1 < - Lib2 < - MyApp

Версия TL;DR: не делая предположений, система сборки избегает введения неопределенности/непредвиденного поведения.

Когда вы создаете MyApp, Lib2 будет скопирован в каталог bin MyApp для вас, но Lib1 не будет. Вам нужно будет добавить ссылку на Lib2 и Lib1 в MyApp, чтобы получить DLL Lib1 в каталоге bin MyApp (в противном случае вы получите ошибку времени выполнения). Было бы невозможно (или, может быть, просто очень сложно) определить точный набор файлов, которые попадают в каталог Lib2 bin, который был бы безопасным и подходящим для копирования в MyApp. Если система сборки сделала предположения о том, что все в каталоге Lib2 bin безопасно для MyApp или если оно неявно ссылается на Lib1 для вас, это может непреднамеренно изменить поведение MyApp.

Представьте решение, в котором более 1 проекта зависит от Lib2, но один из этих проектов хочет загрузить соседний DLL файл, используя Assembly.LoadFrom/Activator.CreateInstance/MEF/etc. (плагин), а другой нет. Автоматическая операция копирования может захватить Lib2 вместе с плагиной dll и скопировать ее в первый и второй каталог сборки проекта (так как это в каталоге Lib2 bin в результате операции сборки). Это изменит поведение второго приложения.

В качестве альтернативы, если бы вы были немного более умны и неявно ссылались на Lib1 для вас, когда вы ссылались на Lib2 (и не только копировали содержимое каталога bin), это все равно могло бы привести к непредвиденным последствиям. Что, если MyApp уже зависел от Lib1, но он использовал копию GAC'd/ngen'd, которая была совместима с той, которую требует Lib2. Если добавление ссылки на Lib2 неявно создало ссылку на Lib1 для вас, это может изменить загрузку Lib1 и изменить поведение среды выполнения вашего приложения. Возможно, он обнаружил, что в каталоге bin MyApp уже есть Lib1 и пропустить его, но тогда он будет делать предположения, что Lib1, который уже существует, является правильным. Может быть, это устаревшая .dll, ожидающая, чтобы ее уничтожила операция "Чистота", и переписывание было правильным шагом.

NuGet решает проблему, которую вы описываете, с помощью зависимостей пакетов. Если у Lib1 и Lib2 были пакеты nuget, а пакет Lib2 зависел от пакета Lib1, когда вы добавляете Lib2 в MyApp, Lib1 также будет добавлен. Обе библиотеки pacakges в конечном итоге попадут в каталог MyApp bin.

Лучшее, что нужно сделать, это немного перевернуть свое мышление. Вместо того, чтобы думать:

Lib2 нуждается в ссылке на Lib1 для компиляции, поэтому я добавлю ссылку на Lib1

Подумайте:

MyApp нуждается в Lib2. Что бы ни требовалось Lib2, мне нужно. Таким образом, MyApp и Lib2 получают ссылку на Lib1. Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll Как из bin сделать dll

Похожие статьи:




Пуловер оверсайз крючком схема




Украшения на маску своими руками




Красивые причёски собранные фото




На газовых котел автоматике схеме




Как сделать выкройку бульдога