VSTS Automated Build NuGet Packager/Publisher

Мой пакет успешно создается и загружается в фид пакетов в VSTS, однако я не могу понять, как отредактировать описание и автора пакета, чтобы мои установленные значения отображались в фиде пакетов.

Из того, что я прочитал, я поместил свой контент в NuGet Packager в дополнительные свойства сборки, и когда я смотрю файл журнала, я вижу это:

...NuGet.exe pack "...csproj" -OutputDirectory "..." -Properties Configuration=release;Description="My Description";Authors="Me";Owners="My Company"

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

Опять же, моя цель — получить описание и автора, которые я установил для просмотра в диспетчере пакетов NuGet в Visual Studio.


person LorneCash    schedule 08.11.2016    source источник


Ответы (2)


Вы можете создать пакет в соответствии с файлом .nuspec. Шаги:

  1. Создайте файл .nuspec для своего проекта (команда: nugget spec).

Например: (включая автора и токен описания)

<?xml version="1.0"?>
<package >
  <metadata>
    <id>CommLib1</id>
    <version>1.0.0.6</version>
    <title>CommLib1</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
</package>
  1. Включить этот файл в систему управления версиями
  2. Укажите аргументы Nuget (токен на шаге 1) шага сборки Nuget Packager введите здесь описание изображения

Обновление1:

В общем, вам просто нужно обновить файл AssemblyInfo.cs вашего проекта (Author=>AssemblyCompany; Description=>AssemblyDescription; Version=>AssemblyVersion), он создает пакет в соответствии с этими данными, если он не может получить метаданные из вашей сборки ( У меня есть проект с этой проблемой).

Итак, шаги:

  1. Убедитесь, что nuget может получить необходимые метаданные, создав пакет с помощью команды nuget.exe непосредственно на вашем локальном компьютере или компьютере сборки (пакет nuget [XX].csproj).

  2. Создайте определение сборки (1. Сборка Visual Studio 2. Nuget Packager со значением по умолчанию 3. Nuget Publisher)

person starian chen-MSFT    schedule 08.11.2016
comment
Я думал об этом, но не хотел вручную обновлять версию в файле *.NuSpec. Я вижу, у вас есть переменная $(v), но есть ли способ получить значение этой переменной из свойства AssemblyVersion? Мое решение представляет собой единую библиотеку классов, и я пытаюсь создать шаблон, чтобы легко публиковать наши общие внутренние библиотеки классов. - person LorneCash; 08.11.2016
comment
@LorneCash Да, вы можете указать версию в аргументе. (Я использую значение переменной в определении сборки) - person starian chen-MSFT; 09.11.2016
comment
@LorneCash Вы можете обновить файл AssemblyInfo.cs напрямую, если он может извлекать метаданные из вашей сборки, а затем собирать, упаковывать и публиковать через сборку VSTS. Я обновил свой ответ. - person starian chen-MSFT; 09.11.2016
comment
@LorneCash Ваш предыдущий комментарий является лишь частью, вам нужно отредактировать его или добавить новый комментарий, чтобы я мог понять вашу точку зрения. - person starian chen-MSFT; 10.11.2016
comment
Вот шаги, которые вы советуете мне выполнить (см. ниже), и, пожалуйста, поправьте меня, если я что-то не так. 1. Создайте вручную *.nuspec с помощью командной строки 2. Отредактируйте автора и описание в *.nuspec 3. Добавьте *.nuspec в TFS 4. Укажите задачу сборки NuGet Packager в файл *.nuspec в TFS Все это имеет смысл, но как насчет в следующий раз, когда я хочу сделать сборку? Файл *.nuspec имеет версию прямо в xml. Я хочу установить свойство AssemblyVersion в файле AssemblyInfo.cs, не вводя его снова в *.nuspec или в переменную сборки. Я хочу установить его один раз и сделать. - person LorneCash; 10.11.2016
comment
В настоящее время я НЕ использую файл *.nuspec в своем NuGet Packager. Я просто указал на *.csproj, и он отлично обновляет версию, но если я переключусь на использование *.nuspec, я не понимаю, как *. nuspec получает обновление для соответствия AssemblyInfo.cs без ручного вмешательства. - person LorneCash; 10.11.2016
comment
@LorneCash Во-первых, вам нужно указать задачу сборки пакета nugget на файл пакета (csproj) вместо .nuspec, он будет основан на файле .nuspec и файле проекта, если в той же папке есть файл [имя проекта].nuspec. Во-вторых, вам не нужно редактировать Author и Description в файле .nuspec, просто сохраните $author$ и $description, а затем укажите значение в аргументе nuget. В-третьих, с $version$ в .nuspec он использует значение AssemblyVersion в файле AssemblyInfo.cs (например, [assembly: AssemblyVersion(1.0.0.9)]). Кстати, вы можете обновить файл AssemblyVersion.cs и файл проекта пакета напрямую без файла .nuspec - person starian chen-MSFT; 11.11.2016
comment
@LorneCash Что произойдет, если вы обновите файл AssemblyInfo.cs и файл проекта пакета напрямую, без файла .nuspec? - person starian chen-MSFT; 11.11.2016
comment
Сейчас я не использую файл nuspec... Мне бы очень хотелось, чтобы это работало без него, и я думаю, что так и должно быть, судя по тому, что я прочитал, я просто не могу понять это до сих пор... Я' я опубликовал новый вопрос, связанный с этим, я пытаюсь разбить его, чтобы понять, почему это не работает. Вот новый вопрос: stackoverflow.com/questions/40570795, если вы тоже хотите атаковать это. - person LorneCash; 13.11.2016
comment
@LorneCash Указываете ли вы значения AssemblyCompany и AssemblyDescription в файле AssemblyInfo.cs? Если да, не могли бы вы воспроизвести эту проблему с новым проектом? Какая версия вашего Nuget.exe? - person starian chen-MSFT; 14.11.2016

Если это сборка пакета, то с этапом сборки NuGet Packager проблем не возникнет. Однако нужно изменить две вещи.

  1. Чтобы указать свойства, как вы делаете, ДОЛЖЕН быть токенизированный файл *.nuspec в том же каталоге, что и файл решения с тем же именем, и, конечно, файл *.nuspec должен быть зарегистрирован в VSTS/TFS.
  2. Имя маркера для описания не может быть Описанием.

Дополнительные сведения о файле *.nuspec см. в решении здесь:

Пакет Nuget.exe ПРЕДУПРЕЖДЕНИЕ. Описание не указано. Использование «Описания»

person LorneCash    schedule 15.11.2016