Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Игорь Лабутин «Продвинутое использование NuGet и MSBuild»

Игорь Лабутин «Продвинутое использование NuGet и MSBuild»

NuGet пакеты используют все. А рано или поздно приходится собрать такой пакет самому. Хорошо если это просто несколько DLL собранных вместе. Встречаются и более сложные случаи — несколько целевых версий фреймворка, специальные скрипты установки и вдобавок расширения MSBuild. Если вы разработчик библиотеки, публикуемой на nuget.org, или вы просто захотели поделиться чем-то полезным с коллегами, выложив ваш пакет на внутренний NuGet-сервер — вам нужно владеть навыками создания NuGet пакетов и помнить о тонкостях которые могут вас подстерегать. В докладе рассмотрим полный цикл создания NuGet пакета и особое внимание уделим «продвинутым» возможностям — скриптам и встраивание в MSBuild.

DotNetRu

April 13, 2017
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. О себе 2  16 лет в разработке ПО 

    С/С++, Linux, QNX, Embedded  Последние 9 лет – .NET (C#)  Интересы  Сети, протоколы обмена данными  Проблемы производительности  Сборка проектов и удобство разработчиков
  2. О докладе 3  NuGet  Создание  Использование 

    MSBuild – написание собственного кода  Как  Зачем?!  Всё это для VS 2015 & NuGet 3.5
  3. О примере 4  Детали  Генерация XSD->C#  Много

    ручной работы   Но можно автоматизировать (PreBuild)! Посмотрим код  Кратко  Читаем XML  Проверяем соответствие схеме (XSD)  Пишем в консоль
  4. Полезное – в NuGet 5 NuGet Server DLL DLL DLL

    Другие файлы .nupkg .nuspec Project DLL DLL DLL Другие файлы Пакуем
  5. Результат 6  Код чтения XML – в NuGet 

    Но в основном проекте все еще нужно использовать PreBuild Action  VS не всегда корректно понимает необходимость сборки  DisableFastUpToDateCheck помогает, но тогда сборка происходит чаще чем хотелось
  6. Помечтаем? 7  Код чтения XML – в NuGet 

    NuGet пакет можно использовать из VS UI  Нет необходимости менять .csproj вручную  Конвертацию XSD в CS настраивается из VS UI  Сборка корректно учитывает состояние файлов
  7. Долой ручной труд 8  Создаем свой собственный MSBuild Target:

    TransformXsd2Cs  Надо как-то знать список XSD файлов  Добавляем в NuGet пакет  build\SuperSerializer.targets  Но как его оттуда вызывать…
  8. Вызываем Target 9  SuperSerializer.targets импортируется автоматически  Для вызова

    можно использовать  CallTarget  DependsOnTargets  BeforeTarget/AfterTarget  Стараться использовать DependsOnTargets  MSBuild для .csproj позволяет встраиваться почти везде <Target Name=“Build” DependsOnTargets=“$(BuildDependsOn)”> Применяем
  9. Результат 10  Код чтения XML – в NuGet 

    NuGet пакет можно использовать из VS UI  Нет необходимости менять .csproj вручную  Конвертацию XSD в CS настраивается из VS UI  Сборка корректно учитывает состояние файлов
  10. Настраиваем сборку 11  MSBuild умеет понимать надо ли собирать

    проект  Но ему надо чуть-чуть подсказать  Задаем Inputs/Outputs атрибуты у TransformXsd2Cs <Target Name="TransformXsd2Cs“ Inputs="@(Xsd2Cs)“ Outputs="@(Xsd2Cs->'%(RootDir)%(Directory)%(Filename).cs')">
  11. Всё в GUI 12  Сообщаем VS что есть новый

    build action <ItemGroup> <AvailableItemName Include="Xsd2Cs" /> </ItemGroup>  Теперь можно не редактировать .csproj Результат
  12. Результат 13  Код чтения XML – в NuGet 

    NuGet пакет можно использовать из VS UI  Нет необходимости менять .csproj вручную  Конвертацию XSD в CS настраивается из VS UI  Сборка корректно учитывает состояние файлов
  13. Последние штрихи 14  Добавить readme.txt  Без powershell не

    обойтись  Добавляем build\install.ps1 для модификации .csproj Результат
  14. Что дальше? 15  Visual Studio 2017  Новый формат

    .csproj  Новый NuGet 4.0  Нет поддержки install.ps1  Кроссплатформенность  .NET Standard