Пакет NuGet - замена токена иногда не удается - PullRequest
0 голосов
/ 17 мая 2018

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

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что nuget pack жалуется на отсутствие Authors и Description в некоторых обстоятельствах, а в других - нет. Мой AssemblyInfo.cs для простейшего проекта, в котором он терпит неудачу, настолько же ванильный, насколько они приходят:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("A.B.C")]
[assembly: AssemblyDescription("Some description here")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Company // Department")]
[assembly: AssemblyProduct("A.B.C")]
[assembly: AssemblyCopyright("Copyright ©  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("88888888-8888-8888-8888-888888888888")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.1.0")]
[assembly: AssemblyFileVersion("1.0.1.0")]

Я очистил значения, но я сохранил формат фактических значений, которые я использую (например, вместо "A.B.C" у нас есть "LibraryName.Module.Submodule").

Файл nuspec одинаково скучен:

<?xml version="1.0"?>
<package >
  <metadata>
    <!-- Mandatory, static stuff -->
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <description>$description$</description>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>

    <!-- Mandatory stuff you should review upon re-packaging -->
    <releaseNotes>The first internal release.</releaseNotes>
    <copyright>Copyright 2018</copyright>

    <!-- Optional stuff you should only include if you need it -->

    <projectUrl>http://www.example.com/</projectUrl>
    <!-- <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> -->
    <!-- <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> -->
    <!-- <tags>Tag1 Tag2</tags> -->
  </metadata>
</package>

При запуске nuget pack иногда происходит сбой с печально известным « Требуются авторы; Требуется описание ». Я имел успех случайным образом, возился с вещами, которые не должны влиять на процесс, такими как добавление или удаление зависимостей или перемещение двоичного файла nuget по файловой системе. И да, я проверял, во всех экспериментах нигде не было файлов nuget.config по пути к бинарному файлу - тем не менее, в некоторых очень тщательно созданных установках это работает, а в других - нет.

В настоящее время у меня есть два сервера в пуле агентов; на одном из них он работает с Nuget 4.6.2 и не работает с 4.7.0. С другой стороны это работает ни с одним. Когда я запускаю установку, где она работает, она работает стабильно каждый раз, когда я запускаю сборку - но сейчас у меня есть один сервер, который работает, и тот, который не работает, и я совершенно озадачен, почему это происходит (и они ' оба согласованы между сборками).

Я обнаружил ошибку, сообщающую, что замена токена не удалась с ошибкой, с которой я столкнулся по причинам, связанным с форматированием AssemblyInfo.cs, но я не думаю, что это так для моего проекта - тогда опять я научился ожидать чего угодно.

Вот полный журнал выполнения:

C:\Program Files\nuget.4.6.2.exe pack "C:\TFS-Agent\_work\2\s\A.B.C\A.B.C.csproj" -OutputDirectory "C:\TFS-Agent\_work\2\s\publish" -Properties Configuration=release -Verbosity detailed
NuGet Version: 4.6.2.5055
Attempting to build package from 'A.B.C.csproj'.
MSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files (x86)\MSBuild\14.0\bin\amd64'. Use option -MSBuildVersion to force nuget to use a specific version of MSBuild.
Packing files from 'C:\TFS-Agent\_work\2\s\A.B.C\bin\Release'.
Using 'A.B.C.nuspec' for metadata.
Authors is required.
Description is required.
System.Exception: Authors is required.
Description is required.
   at NuGet.Packaging.Manifest.Validate(Manifest manifest)
   at NuGet.Packaging.Manifest.ReadFrom(Stream stream, Func`2 propertyProvider, Boolean validateSchema)
   at NuGet.CommandLine.ProjectFactory.ProcessNuspec(PackageBuilder builder, String basePath)
   at NuGet.CommandLine.ProjectFactory.CreateBuilder(String basePath, NuGetVersion version, String suffix, Boolean buildIfNeeded, PackageBuilder builder)
   at NuGet.Commands.PackCommandRunner.BuildFromProjectFile(String path)
   at NuGet.Commands.PackCommandRunner.BuildPackage()
   at NuGet.CommandLine.PackCommand.ExecuteCommand()
   at NuGet.CommandLine.Command.ExecuteCommandAsync()
   at NuGet.CommandLine.Command.Execute()
   at NuGet.CommandLine.Program.MainCore(String workingDirectory, String[] args)
System.Exception: Unexpected exit code 1 returned from tool nuget.4.6.2.exe
   at Microsoft.TeamFoundation.DistributedTask.Task.Internal.InvokeToolCmdlet.ProcessRecord()
   at System.Management.Automation.CommandProcessor.ProcessRecord()

Вывод до ошибки идентичен на сервере, где она работает (т.е. вплоть до Using 'A.B.C.nuspec' for metadata. включительно). Разница лишь в том, что ... ну ... это работает.

Пожалуйста, дайте мне знать, если вы можете предложить какие-либо указания, по которым я мог бы продолжить это расследование.

Подробнее

  • Оба агента версии 2.112.0
  • Работающий сервер работает под управлением Windows Server 2012 R2 (Agent.OSVersion = 6.3.9600), а не работающий - под управлением Windows Server 2012 Standard (Agent.OSVersion = 6.2.9200)
  • Я попытался скопировать / вставить квазистатические Авторы и Описание из AssemblyInfo.cs в файлы nuspec, но это нарушает управление версиями пакетов (все они генерируются с версией 1.0.0). Я не хочу жить с обновлением версии в двух местах каждый раз вручную.
  • В качестве временного решения я ограничил сборку на работающем сервере, добавив ограничение на возможность Agent.OSVersion. Мне это не нравится.

1 Ответ

0 голосов
/ 11 октября 2018

У меня была похожая проблема. Мне пришлось включить элемент Description в csproj и установить значение. Этот документ был полезен. https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets

...