Невозможно упаковать пакет 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>