Невозможно упаковать пакет NuGet с помощью CLI dotnet и файла nuspec - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть несколько проектов, которые я перевожу с .NET Framework 4.7 на .NET Standard 2.0.В результате я пытаюсь использовать команду dotnet pack для создания пакета NuGet при использовании моего файла nuspec с токенами.У меня есть несколько пользовательских сценариев сборки, которые генерируют номер версии для меня.Мои сгенерированные файлы не являются частью контроля версий, но файл nuspec, поэтому я хотел бы попытаться найти способ заставить токены работать, иначе я застрял в написании новых сценариев.

Первым делом я установил GenerateAssemblyInfo на false в файлах проекта.В моем самом простом проекте файл csproj выглядит следующим образом:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
     <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>

У меня есть AssemblyInfo.cs, который я генерирую как часть моего процесса сборки.Файл выглядит так до того, как я скомпилирую проект:

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

[assembly: AssemblyCompany("Company Name")]
[assembly: AssemblyCopyright("Copyright © 2019")]

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif

[assembly: AssemblyTitle("The Title")]
[assembly: AssemblyDescription("The Description")]
[assembly: AssemblyProduct("The Product")]
[assembly: ComVisible(false)]
[assembly: Guid("48d6ef54-a8fb-4876-8a9a-2fb8e8cd27e7")]
[assembly: AssemblyVersion("6.0.0.0")]
[assembly: AssemblyFileVersion("6.0.0.0")]

У меня есть файл .nuspec, который я использую для создания пакета NuGet, который выглядит следующим образом:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>My name</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>My Release Notes</releaseNotes>
    <copyright>Copyright 2019</copyright>
    <projectUrl>http://url.local</projectUrl>
  </metadata>
</package>

После долгих чтений (не фанат того, кто когда-либо писал новые документы для .NET Core), я считаю, что эту команду мне нужно выполнить, чтобы использовать мой файл nuspec: dotnet pack SubFolder\MyProject.Model.csproj /p:NuspecFile=MyProject.Model.nuspec /p:NuspecBasePath=nuget

Результатэто ошибка:

NuGet.Build.Tasks.Pack.targets (202,5): ошибка: произошла ошибка при попытке проанализировать значение '' свойства 'версии' в файле манифеста,[F: \ Git \ MyProject \ Model \ MyProject.Model \ MyProject.Model.csproj]

NuGet.Build.Tasks.Pack.targets (202,5): ошибка: значение не может быть нулевым или пустымстрока.[F: \ Git \ MyProject \ Model \ MyProject.Model \ MyProject.Model.csproj]

NuGet.Build.Tasks.Pack.targets (202,5): ошибка: имя параметра: значение [F:\ Git \ MyProject \ Model \ MyProject.Model \ MyProject.Model.csproj]

Исходя из результатов, ясно, что файл базовых целей не извлекает значения из моего AssemblyInfo.csвместо этого он пытается получить значения непосредственно из файла csproj.Поэтому я попытался упростить процесс и выполнил эту команду: dotnet pack MyProject.Model\MyProject.Model.csproj, которая создала мой пакет NuGet, но не содержала метаданные в моем nuspec или в моем AssemblyInfo.cs файле.

Я прочиталмножество открытых вопросов по GitHub из проектов dotnet-cli и NuGet, которые кажутся похожими на те, что я испытываю, но ни один из них не дал мне решения, которое работает.Кто-нибудь еще считает это ошибкой или я что-то упустил?

1 Ответ

0 голосов
/ 04 марта 2019

У меня была та же проблема, и я решил ее, добавив <NuspecProperties> к csproj, как предложено здесь: https://github.com/NuGet/Home/issues/6636

<NuspecFile>package.nuspec</NuspecFile>
<NuspecProperties>$(NuspecProperties);configuration=$(Configuration)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);version=$(Version)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);id=$(PackageId)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);author=$(Authors)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageProjectUrl=$(PackageProjectUrl)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);Description=$(Description)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageReleaseNotes=$(PackageReleaseNotes)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);Copyright=$(Copyright)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageTags=$(PackageTags)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);RepositoryType=$(RepositoryType)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);RepositoryUrl=$(RepositoryUrl)</NuspecProperties>
...