РезюмеNuGet: Не включайте ссылку из пакета
Когда пакет библиотеки, используя NuGet и ссылаться на него в другом проекте ссылающийся проект будет тянуть в файлы вывода дополнительных к директории сборки.
Рабочая Case
Project: ReferenceLibrary Output: ReferenceLibrary.dll Project: DerivedLibrary Output: DerivedLibrary.dll References: ReferenceLibrary (Copy Local = False) Project: ConsoleApplication Output: ConsoleApplication.exe References: DerivedLibrary
Edit: справочная библиотека не копируется, потому что она не будет решена во время выполнения. В зависимости от цели есть несколько версий. Ссылка на вывод proj. так что я могу сделать код против него.
Если я построю это, то только файл DerivedLibrary.dll будет скопирован в папку сборки ConsoleApplication (т. Е. Bin/Release).
Неработающий Дело ссылка
Project: ConsoleApplication
Output: ConsoleApplication.exe
Package: DerivedLibrary.nupkg (depends on ReferenceLibrary.nupkg)
проект добавляется DerivedLibray.dll. Оба DerivedLibrary.dll и ReferenceLibrary.dll копируются из их пакетов.
Я вижу, что он копируется в журнале MSBUILD.
_CopyFilesMarkedCopyLocal:
Copying file from "c:\...\ReferenceLibrary.dll" to "bin\Debug\ReferenceLibrary.dll"
Несмотря на то, что он не упоминается в формате .csproj нигде.
Я не могу сказать, является ли это проблемой NuGet (из-за того, как она распаковывает вещи) или проекта Visual Studio (как он копирует ссылочные сборки и кодирует требования в других сборках).
Если библиотека Derived зависит от библиотеки ссылок, неужели вы действительно удивились, что приложение, использующее Derived-библиотеку, также нуждается в библиотеке Reference? Или я неправильно понял вопрос? – mason
Извините, я попытался устранить эту сложность, поскольку вопрос становится действительно незадачливым. Эталонная библиотека разрешена во время выполнения (следовательно, я не хочу, чтобы она копировалась в выходную папку). Я добавлю его обратно. – Karle
Если это указано во время выполнения, ваше приложение будет запускаться только в том случае, если кто-то вручную переведет его в папку «bin» или в GAC? Какой прецедент для этого? – ashes999