2015-01-13 2 views
6

Это противоположная проблема из того, что я обычно читаю, это люди, пытающиеся получить файлы, включенные в пакет NuGet. Я пытаюсь остановка файл из автоматически включается.NuGet Pack: ignore default включает

Я создаю библиотеку предварительно скомпилированных шаблонов MVC (используя RazorGenerator.Mvc), файлы .less и JavaScript для их поддержки по мере необходимости. Идея состоит в том, что это основные вещи, которые входят во все наши сайты.

По умолчанию nuget pack включает в себя любые файлы, отмеченные Строить Действие: Содержание в проекте, который любой вновь созданный вид, .less файл или скрипт будет. Кажется, нет возможности отменить это поведение. Связанный с этим вопрос представил решение empty <files> node in the .nuspec to stop all includes, но я хочу включить файлы, только те, которые я выбираю.

Теперь, как затычка, я могу пройти, явно установить все, чтобы не быть Content (не используя None вместо), то явно настройки, какие файлы я и не хочу копировать и куда я их скопирован в файл .nuspec. Однако, если появится другой разработчик, например, мое будущее, и забудет этот шаг, тогда вновь добавленные файлы будут скопированы в пакет, а затем в проект назначения во время следующей установки или обновления.

Я нашел OctoPack, и это не включая НИЧТО по умолчанию, как только он обнаруживает <files> узла в .nuspec, но я не использую ничего другого из TeamCity, и переписывания моих серверных скриптов сборки, чтобы понять, как invoke OctoPack вместо nuget pack не поражает меня как отличный вариант. OctoPack также имеет ограничения; зависимости должны быть перечислены вручную, токены замены для файла .nuspec должны быть переданы в командной строке (вместо чтения с AssemblyInfo.cs), и это просто не похоже, что инструмент предназначен для этого использования - они даже сказать: «OctoPack следует устанавливать только на проекты, которые вы собираетесь развернуть, - это проекты консольных приложений, проекты Windows Service и веб-приложения ASP.NET. Модульные тесты, библиотеки классов и другие вспомогательные проекты не будут выбраны «. (OctoPack Documentation)

Следующая альтернатива Я пытался использовал msbuild просто уничтожить группу содержимого во время BeforeBuild мероприятия:

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <Content Remove="**\*.*" /> 
     <None Include="**\*.*" /> 
    </ItemGroup> 
    <Message Text="Content files: @(Content)" Importance="High" /> 
</Target> 

сообщение подтверждает, что группа Content пуст, но nuget pack не кажется беспокоиться; он все равно включает все файлы в любом случае.

Кто-нибудь успешно создал такой пакет, без необходимости вручную отмечать все. Строка Действие: Нет и без использования OctoPack?

ответ

5

кажется, что если вы вызываете nuget pack MyProject.nuspec (вместо того, чтобы просто nuget pack, который будет искать как .csproj и .nuspec), вы можете получить желаемое поведение, хотя до сих пор (например, с OctoPack) теряют токены замены и автоматическую зависимостей. Таким образом, это не идеальное решение, которое было бы чем-то вроде --no-default-content, но оно выполняет свою работу достаточно хорошо.

nuget pack MyProject.nuspec -Properties version={XYZ} (где XYZ заполняется сервером сборки), по крайней мере, позволит мне удостовериться, что номер версии также увеличен правильно. Например, я мог бы установить в .nuspec

<version>1.1.0.$version$</version> и просто использовать версию SVN в качестве последней части.

+0

«Это не идеальное решение, которое было бы чем-то вроде« -no-default-content ». Более совершенное решение позволило бы вам написать что-то в файле .nuspec, чтобы контролировать это. Кто собирается пойти на работу, помня, какие параметры нужно переходить на 'nuget' каждый раз? – binki

+0

Любой, кто использует сервер непрерывной интеграции, не должен помнить. Теперь я должен помнить, что если я добавлю новую зависимость или изменю версию зависимостей, мне придется вручную добавить ее в nuspec, вместо того, чтобы читать эти данные из package.config. –

0

Другое решение (по-прежнему не идеальное, но по крайней мере вы можете продолжать передавать файл .csproj и не терять его преимуществ) заключается в удалении папки содержимого полученного файла .nupkg (путем обработки его как .zip).

Самый простой способ сделать это с помощью сценария, как это:

Remove files from .zip file with Powershell

Обратите внимание, что System.IO.Compression - используемый этим скриптом - работает только с PowerShell 3.0 и .NET 4.5.

Смежные вопросы