Использование NuGet с файлами * .dll.refresh в проектах веб-сайтов ASP.NET с проектами веб-развертывания

Если у вас есть тип проекта веб-сайта 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?


person Derek Morrison    schedule 12.05.2011    source источник


Ответы (3)


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

person Ricardo Pardini    schedule 23.02.2013
comment
Это протестировано и работает как в Visual Studio, так и при запуске MSBuild непосредственно на машине сборки. - person Ricardo Pardini; 23.02.2013

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

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

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

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

person GC.    schedule 11.05.2012

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

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

person Danny Tuppeny    schedule 12.05.2011