Как остановить упаковку NuGet от включения нежелательных файлов - PullRequest
0 голосов
/ 09 июля 2019

Я создаю пакет NuGet с иерархией папок, которая выглядит следующим образом:

ProjectDir
    Infrastructure
        class1.cs
        class2.cs
    Task
        class3.cs
        class3.cs
    StuffToInclude
        SampleCode
            sampleclass1.cs.pp
            sampleclass2.cs.pp
        Images
            image1.gif
            image2.gif
        Doc
            text1.txt
            text2.txt
    Project.nuspec

Обратите внимание, что файл nuspec создается просто с помощью команды "nuget spec", а затем добавляется следующий раздел файла:

<files>
    <file src="StuffToInclude\**\*.*" target="content" />
</files>

Что бы я ожидал (и хочу), это папка содержимого в пакете, которая выглядит следующим образом:

content
    SampleCode
        sampleclass1.cs.pp
        sampleclass2.cs.pp
    Images
        image1.gif
        image2.gif
    Doc
        text1.txt
        text2.txt

Однако я получаю немного большую папку с содержимым, которая содержит вторую копию папки «StuffToInclude», которая выглядит примерно так:

content
    StuffToInclude
        Images
            image1.gif
            image2.gif
        Doc
            text1.txt
            text2.txt
    SampleCode
        sampleclass1.cs.pp
        sampleclass2.cs.pp
    Images
        image1.gif
        image2.gif
    Doc
        text1.txt
        text2.txt

Обратите внимание, что в нежелательной папке StuffToInclude нет вложенной папки SampleCode - каким-то образом упаковщик nuget обнаружил, что файлы ".pp" не следует помещать в содержимое, если это явно не требуется. Но все эти другие файлы (во всех других папках) дублируются излишне, и нежелательно, чтобы они были там - потому что когда пакет используется, эта папка также дублируется в целевом проекте.

Я подумал, что, возможно, что-то подобное в nuspec поможет:

<files>
    <file src="StuffToInclude\**\*.*" target="content" exclude="StuffToInclude\**\*.*"/>
</files>

но все варианты, которые я пробовал для атрибута "exclude", похоже, не помогают.

Как исключить файл "StuffToInclude" из папки содержимого?

Большое спасибо.

1 Ответ

1 голос
/ 11 июля 2019

Как запретить упаковке NuGet включать ненужные файлы

Я предполагаю, что команда, которую вы используете при создании пакета, выглядит как nuget pack xx.csproj.

Если да, то по какой особой причине вы создали пакет на основе файла проекта после создания файла .nuspec?

Согласно этому документу , мы можем использовать команду nuget pack на основе указанного .nuspec or project file.

Поэтому обычно, если мы создаем пакет на основе .csproj, нет необходимости создавать файл .nuspec. Также, если мы хотим создать пакет на основе .nuspec, я предлагаю использовать команду nuget pack xx.nuspec вместо nuget pack xx.csproj.

Причина возникновения проблемы:

Я провел несколько тестов и обнаружил, что когда мы помещаем файл Project.nuspec в каталог проекта и используем команду типа nuget pack xx.csproj, тогда nuget.exe будет считывать данные из обоих xx.nuspec and xx.csproj Вот почему у вас есть вторая копия.

1 # Структура для nuget pack xx.csproj, если нет xx.nuspec в том же каталоге:

content
    StuffToInclude
        Images
            image1.gif
            image2.gif
        Doc
            text1.txt
            text2.txt

2 # Структура для nuget pack xx.nuspec:

content
    SampleCode
        sampleclass1.cs.pp
        sampleclass2.cs.pp
    Images
        image1.gif
        image2.gif
    Doc
        text1.txt
        text2.txt

И когда вы используете команду nuget pack на основе файла проекта (.csproj), где существует ProjectName.nuspec, он считывает данные как из .csproj, так и из .nuspec. в результате получается вторая копия, как у вас.

Чтобы решить эту проблему:

  1. Сохраните файл xx.nuspec и используйте команду вроде nuget pack xx.nuspec. (Рекомендуется)

  2. Удалите файл xx.nuspec (или удалите <Files> section) и используйте команду, подобную nuget pack xx.csproj, чтобы включить эти xx.cs.pp файлы в папку содержимого, вам может потребоваться установить для build action значение content.

  3. Сохраните и файл xx.nuspec, и файл xx.csproj (см. Ниже), и все, что вы хотите в файле xx.nuspec, но во избежание нежелательных вторых копий вещей убедитесь, что каждый отдельный элемент если вы не хотите, чтобы копирование дважды было установлено на Build Action из None.

...