Пакет NuGet не упаковывает все файлы в выходной каталог.Что мне не хватает? - PullRequest
4 голосов
/ 09 марта 2012

Я пытаюсь создать пакет NuGet из .csproj. Я успешно скомпилировал проект, и выходная папка содержит все необходимые файлы (моя сборка и все ее зависимости). Однако NuGet, похоже, только помещает сборку, созданную .csproj, в пакет, а не какую-либо из его зависимостей. Моя командная строка выглядит так:

nuget pack MyProject.csproj -Property Configuration=Release

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

Есть какие-нибудь мысли о том, почему он не собирает зависимости?

1 Ответ

4 голосов
/ 04 апреля 2012

Если вам нужно автоматически обновлять файл nuspec, это действительно просто XML-файл (как я уверен, вы знаете), поэтому есть несколько очень хороших инструментов, которые вы можете использовать из MSBuild для автоматизации создания nuspec / обновления. Из коробки MSBuild предоставляет несколько задач, которые могут обновлять или преобразовывать XML, и я использовал задачи сообщества MSBuild для настройки начального nuspec. Например, nuspec по умолчанию содержит несколько строк с бройлерной табличкой, которые мне не нужны, поэтому я использую задачи XmlUpdate для их удаления.

Хотя я не изучал сканирование файла csproj на наличие ненуклеарных ссылок, я думаю, что это возможно с небольшим исследованием. Вот несколько ссылок на записи блога, описывающие мой опыт автоматизации NuGet, они могут помочь вам начать:

Создание пакетов с NuGet MSBuild Way - Эта статья содержит некоторые базовые обновления NuSpec, поскольку описанный пакет не отличается от типа пакета, который NuGet уже знает, как автоматизировать.

Управление деталями MEF с помощью Nuget - Эта статья содержит некоторые более сложные обновления для поддержки распространения деталей MEF в виде ссылок только для времени выполнения.

Если вы планируете делать это много, не хотите связываться с MSBuild или просто хотите вернуться к поведению, которое вам понравилось в версии ProjectFactory.cs, выпущенной до 1360 года, NuGet поддерживает стороннее расширение через MEF. Вы можете перейти в систему управления исходным кодом и получить более ранний код, который вам понравился, и создать собственную команду (например, custompack), которая обеспечивает такое поведение. Тогда вы можете использовать его из командной строки так:

nuget custompack MyProject.csproj -Property Configuration=Release

Я думаю, что это действительно крутой аспект NuGet, но я сам еще не играл с ним. Вот статья, которая объясняет, как это сделать:

Расширение командной строки NuGet

Поэтому, хотя Дэвид упомянул, что NuGet не предназначен для поддержки этого сценария, если сценарий верен для вас , вы можете пойти по этому пути, чтобы расширить NuGet для удовлетворения ваших потребностей.

...