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