Невозможно упаковать пакет NuGet с помощью CLI dotnet и файла nuspec

У меня есть несколько проектов, которые я перехожу с.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 проекты, которые кажутся похожими на то, что я испытываю, но ни один из них не дал мне решения, которое работает. Кто-нибудь еще считает это ошибкой или я что-то упустил?

0 ответов

У меня была такая же проблема, и я решил ее, добавив <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>
Другие вопросы по тегам