Использование NuGet с файлами * .dll.refresh в проектах ASP.NET «Веб-сайт» с проектами веб-развертывания - PullRequest
10 голосов
/ 12 мая 2011

Если у вас есть тип проекта веб-сайта ASP.NET (тот, у которого нет правильного файла проекта .csproj или .vpproj, и это просто папка с незакрепленными файлами), то когда вы добавляете пакет с NuGet, он делает Файл * .dll.refresh в каталоге Bin для ссылки на dll пакета в папке родительских пакетов.

Например, если вы выполняете «install-package elmah» из консоли диспетчера пакетов, то Elmah помещается в папку пакетов в каталоге решений проекта, а файл Elmah.dll.refresh помещается в папку Bin проекта. .

Когда я собираю проект локально, Visual Studio автоматически извлекает библиотеку DLL, на которую ссылается файл обновления. Сайт и Элма работают правильно. У меня нет файла Elmah.dll, который находится в каталоге Bin проекта, зарегистрированного в системе управления версиями (только файл обновления и папка пакетов отмечены).

Однако я использую проекты веб-развертывания для предварительной компиляции сайта и выполнения замен web.config для развертываний. Когда решение построено таким образом, Elmah.dll автоматически не загружается в каталог Bin проекта веб-сайта, и сайт работает неправильно из-за отсутствующей DLL.

Как NuGet предназначен для использования в подобных ситуациях? Должен ли я проверить в Elmah.dll в каталоге Bin?

Ответы [ 3 ]

9 голосов
/ 23 февраля 2013

Это основано на решении GC. Выше.Добавьте библиотеку классов (csproj) и создайте ссылку на эту библиотеку классов в проекте веб-сайта.Добавьте пакеты nuget в библиотеку классов.В библиотеке классов фактически ссылается на пакеты nuget в некотором файле класса .Может быть, создать одноразовый экземпляр или что-то.Вы можете использовать любой класс, который содержится в пакете.Это заставляет .dll копироваться в каталог Bin в проекте веб-сайта.

5 голосов
/ 11 мая 2012

- РЕДАКТИРОВАТЬ - см. Обновленную версию этого решения выше.

Просто добавьте проект библиотеки классов в решение и добавьте ссылку на проект библиотеки классов на свой веб-сайт.

Затем добавьте nuget в библиотеку классов, а не в проект веб-сайта.

Когда ваш сайт собирается, он по очереди извлекает все библиотеки классов.

0 голосов
/ 12 мая 2011

Я предполагаю, что предварительная компиляция не обновляет библиотеки DLL с помощью файла .refresh - возможно, это сделано в Visual Studio.

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

...