dotnet pack "Элемент <package> не распознан"

Я пытаюсь создать пакет NuGet нового шаблона dotnet. Я создал файл nuspec, чтобы установить детали пакета, и он находится рядом с моей папкой с содержимым, которая содержит все, что я хочу упаковать:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <!-- The identifier that must be unique within the hosting gallery -->
    <id>My.EpiserverCMS</id>

    <!-- The package version number that is used when resolving dependencies -->
    <version>1.0.0</version>

    <!-- Authors contain text that appears directly on the gallery -->
    <authors>Me</authors>

    <description></description>

    <!-- 
        Owners are typically nuget.org identities that allow gallery
        users to easily find other packages by the same owners.  
    -->
    <owners>me</owners>

     <!-- License and project URLs provide links for the gallery -->
    <licenseUrl></licenseUrl>
    <projectUrl></projectUrl>

    <!-- The icon is used in Visual Studio's package manager UI -->
    <iconUrl></iconUrl>

    <!-- 
        If true, this value prompts the user to accept the license when
        installing the package. 
    -->
    <requireLicenseAcceptance>false</requireLicenseAcceptance>

    <!-- Any details about this particular release -->
    <releaseNotes>First Release</releaseNotes>

    <!-- 
        The description can be used in package manager UI. Note that the
        nuget.org gallery uses information you add in the portal. 
    -->
    <description>dotnet new template for Episerver CMS</description>

    <!-- Copyright information -->
    <copyright>Copyright ©2018 Me</copyright>

    <!-- Tags appear in the gallery and can be used for tag searches -->
    <tags>web episerver cms</tags>

    <!-- Dependencies are automatically installed when the package is installed -->
    <dependencies>
    </dependencies>

    <packageTypes>
        <packageType name="Template" />
    </packageTypes>
</metadata>

<!-- A readme.txt to display when the package is installed -->
<files>
    <file src="README.md" target="" />
    <file src="**" exclude=".vs\*,packages\*,**\*.mdf,**\*.ldf,**\*.log"></file>
</files>
</package>

Но когда я запускаю пакет dotnet, я получаю сообщение об ошибке:

error MSB4068: The element <package> is unrecognized, or not supported in this context.

Что я действительно не понимаю. Разве пакет не должен быть корневым элементом в файле.nuspec?

1 ответ

Решение

dotnet pack не поддерживает упаковку файлов nuspec. Он поддерживает только проекты msbuild, которые содержат Pack цель.

Вы можете создать проект csproj и использовать NuspecFile собственность или использование nuget pack через версию nuget.exe с http://nuget.org/downloads или через nuget исполняемый файл, предоставляемый платформой mono на платформах, отличных от Windows.

Пакет dotnet поддерживает файлы nuspec. Однако вы должны передать им пару конкретных флагов конфигурации и добавить зависимость в свой проект. См. Документацию здесь: https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets

Другие вопросы по тегам