За последние пару дней я испытал ужасное разочарование, пытаясь развернуть непрерывную доставку для конкретного проекта через 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. Мне это не нравится.