Рекурсивно включают в себя Nuget DLL через Gitignore

Я использую GIT с новым проектом ASP.NET MVC. У меня есть строка в моем файле gitignore, чтобы игнорировать DLL

*.dll

Я хотел бы добавить что-то по строкам следующего, чтобы включить (то есть не игнорировать) библиотеки DLL в моей папке пакетов NUGET

  !/packages/*.dll

Проблема, с которой я сталкиваюсь, заключается в том, что не все пакеты nuget создаются одинаково и, в зависимости от рассматриваемого пакета, DLL могут быть вложены в произвольное количество уровней в иерархии путей. Кажется, что мне просто нужно рекурсивное решение по строкам:

!/packages/**/*.dll

!/packages/**/*

Я еще не нашел решение, которое будет работать через mysysgit (или любое распределение окон из git).

Кто-нибудь знает, как это сделать?

Ответ 1

Оставьте свой верхний уровень gitignore один, сохранив *.dll в нем.

Создайте еще один .gitignore файл в каталоге пакетов и поместите в него !*.dll.

Ответ 2

Еще один вариант, который следует учитывать, НЕ включает в себя ваши DLL файлы NuGet в вашем репозитории и вместо этого загружает их при первом создании проекта. Это то, что мы делаем со всеми нашими зависимостями NuGet.

UPDATE

Nuget обрабатывает это сейчас без необходимости вручную создавать собственные события сборки. Подробнее см. на этой странице: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


Исходный ответ:

Мы помещаем приложение NuGet.exe в папку инструментов в нашем решении, а затем добавляем следующее к событию предварительной сборки проекта.

"$(SolutionDir)Tools\NuGet.exe" install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages"

В первый раз, когда мы создаем приложение, оно будет загружать все зависимости, но с последующими сборками NuGet достаточно умен, чтобы видеть, что они уже существуют в правильной версии и пропускают их.