В прошлый раз я рассказывал, как настроить сборку проекта с помощью UppercuT. Продолжая тему, расскажу как настроить создание nuget-пакетов с его помощью.
Для начала надо определиться, какие задачи надо решить при создании пакетов:
С версиями разобрались, но в текущем виде Uppercut создаст два nuget-пакета с одинаковым содержанием: все сборки проекта и все сборки сборки Castle.Windsor. А надо бы только необходимое для пакета файлы...
Решение: надо создать две папки для разных проектов, и скопировать в них только необходимые сборки, и соответствующие nuspec-файлы. И здесь на сцену выходят точки расширения UppercuT. Воспользовавшись руководством, создадим файла для nugetPrepare.post.step. Полную версию можно посмотреть на github, а здесь представлю только значимую выдержку:
Спасибо UppercuT!
Для начала надо определиться, какие задачи надо решить при создании пакетов:
- Создание пакета Solyutor.EventPublisher
- Создание пакета Solyutor.EventPublisher.Windsor, зависящего от Solyutor.EventPublisher и Castle.Windsor.
<?xml version="1.0"?> <package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <metadata> <id>Solyutor.EventPublisher</id> <version>DO_NOT_EDIT</version> <authors>Jury Soldatenkov</authors> <owners>Jury Soldatenkov</owners> <summary>Simple extensible event aggregator for net.</summary> <description>Simple extensible event aggregator for net.</description> <projectUrl>https://github.com/solyutor/Solyutor.EventPublisher</projectUrl> </metadata> </package>И схожий файл для Solyutor.EventPublisher.Windsor, с прописанными зависимостями на Solyutor.EventPublisher.
<?xml version="1.0"?> <package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <metadata> <id>Solyutor.EventPublisher.Windsor</id> <version>DO_NOT_EDIT</version> <authors>Jury Soldatenkov</authors> <owners>Jury Soldatenkov</owners> <summary>Castle Windsor extensions for Solyutor.EventPublisher</summary> <description>Provides facility that allows transient listeners to handle messages.</description> <projectUrl>https://github.com/solyutor/Solyutor.EventPublisher</projectUrl> <dependencies> <dependency id="Castle.Windsor" version="2.5.3" /> <dependency id="Solyutor.EventPublisher" version="DO_NOT_EDIT"/> </dependencies> </metadata> </package>Версия пакета заполнять необязательно, ее проставит UppercuT. Но на этом этапе поджидала небольшая засада: версия проекта подставлялась правильно, но аттрибут version для зависимости Solyutor.EventPublisher не обновился. Посмотрев файл nugetPrepare.step в папке build обнаружил ответственный за версии nant-код:
<xmlpoke file="${spec.file}" xpath="/package/metadata/version" value="${assembly.version.full}" />Чуть поразмыслив над проблемой, дописал в той же задаче простановку версии зависимости из проекта:
<xmlpoke file="${spec.file}" xpath="/package/metadata/dependencies/dependency[@id = 'Solyutor.EventPublisher']/@version" value="${assembly.version.full}" />Это скорее хак, чем решение правильное решение проблемы. Но это единственное место, где версия проекта уже есть в виде установленного nant-свойства.
С версиями разобрались, но в текущем виде Uppercut создаст два nuget-пакета с одинаковым содержанием: все сборки проекта и все сборки сборки Castle.Windsor. А надо бы только необходимое для пакета файлы...
Решение: надо создать две папки для разных проектов, и скопировать в них только необходимые сборки, и соответствующие nuspec-файлы. И здесь на сцену выходят точки расширения UppercuT. Воспользовавшись руководством, создадим файла для nugetPrepare.post.step. Полную версию можно посмотреть на github, а здесь представлю только значимую выдержку:
<property name="dirs.publisher" value="${dirs.drop.nuget}\Publisher"/> <property name="dirs.publisher.windsor" value="${dirs.drop.nuget}\Publisher.Windsor"/> <target name="go"> <delete dir="${dirs.publisher}" failonerror="false"/> <delete dir="${dirs.publisher.windsor}" failonerror="false"/> <mkdir dir="${dirs.publisher}" /> <mkdir dir="${dirs.publisher.windsor}"/> <copy todir="${dirs.publisher}\lib"> <fileset basedir="${dirs.drop.nuget}\lib"> <include name="Solyutor.EventPublisher.dll"/> <include name="Solyutor.EventPublisher.pdb"/> </fileset> </copy> <copy todir="${dirs.publisher.windsor}\lib"> <fileset basedir="${dirs.drop.nuget}\lib"> <include name="Solyutor.EventPublisher.Windsor.dll"/> <include name="Solyutor.EventPublisher.Windsor.pdb"/> </fileset> </copy> <copy file="${dirs.drop.nuget}\lib\License.txt" todir="${dirs.publisher}"/> <copy file="${dirs.drop.nuget}\lib\License.txt" todir="${dirs.publisher.windsor}"/> <move file="${dirs.drop.nuget}\Solyutor.EventPublisher.nuspec" todir="${dirs.publisher}"/> <move file="${dirs.drop.nuget}\Solyutor.EventPublisher.Windsor.nuspec" todir="${dirs.publisher.windsor}"/> </target>На этом настройка заканчивается. Можно запускать build.bat, и в папке code_drop/nuget будут два пакета nuget.
Спасибо UppercuT!
Комментариев нет:
Отправить комментарий