Требуемый элемент 'метаданные' отсутствует в ошибке манифеста при выполнении пакета dotnet - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь создать пакет nuget, объединив файл .nuspec и .csproj.

Мой файл .csproj выглядит следующим образом:

<PropertyGroup>    
    <TargetFramework>netstandard2.0</TargetFramework>
    <Authors>Author name</Authors>
    <Company>Company name</Company>    

    <RepositoryUrl>RepositoryURL</RepositoryUrl>
    <VersionPrefix>0.0.1</VersionPrefix>
    <PackageId>SomeID</PackageId>
    <Description>Description</Description>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>    
    <NuspecFile>Projectname.nuspec</NuspecFile>     
  </PropertyGroup>

Мой файл .nuspec выглядит следующим образом:

<?xml version="1.0"?>
<package>   
   <files>
      <file src=" somefile.json" target="lib" />    
    </files>
</package>

Теперь, когда я пытаюсь включить dotnet pack. Файл csproj завершается с ошибкой:

The required element 'metadata' is missing from the manifest.

Я также попробовал несколько вещей здесь.

  1. Попытка явного сопоставления свойств, как указано здесь: Невозможно упаковать пакет NuGet с использованием CLI dotnet и файла nuspec , но произошла ошибка с теми же ошибками

  2. Попытка поместить явный тег metadata в файл .nuspec. например, <metadata>$PackageId</metadata>, надеясь, что он будет извлекать $package из файла .csproj, но это завершится ошибкой со следующей ошибкой:

The required element 'id' is missing from the manifest.

Как я могу объединить оба. csproj и .nuspec сделать dotnet pack, не сталкиваясь с этой ошибкой? Я почти уверен, что возможно только то, что мне чего-то не хватает.

Есть предложения?

В манифесте отсутствует обязательный элемент 'id'.

1 Ответ

0 голосов
/ 27 октября 2019

При использовании цели пакета NuBet MSBuild (dotnet pack является псевдонимом для dotnet msbuild -t:pack), вы не можете смешивать и сопоставлять файл nuspec и csproj. Если вы предоставите свой собственный файл nuspec, он должен быть завершен, но команда NuGet не рекомендует это. Лучше сделать вид, что nuspec больше не существует и является просто историческим артефактом старых версий NuGet.

(Почти) Все метаданные могут быть указаны в csproj с соответствующим свойством MSBuild . Элементы MSBuild типа Content автоматически помещаются в папки content/ и contentFiles/. Когда вам нужно добавить дополнительные файлы, вы используете метаданные PackagePath .

. В дополнение к этому размещение файла конфигурации в папке lib/, вероятно, не будет работать так, как выхотеть. Что ж, это может сработать при отладке приложений .NET Core, поскольку сборки загружаются из папки глобальных пакетов, в которую извлекаются пакеты. Однако при публикации приложения для развертывания файл не будет скопирован. Но это выходит за рамки этого вопроса.

...