Пример nuspec contentFiles

Вчера был выпущен NuGet 3.3 (примечания к выпуску), и теперь поддерживается новый элемент contentFiles (документы). Однако я не могу заставить это работать.

Я использую NuGet.exe в качестве процесса сборки. Он обновлен до v3.3. Я также обновил свою Visual Studio до 2015 года с обновлением 1 и перезагрузился.

Вот мой файл nuspec (Hello.world.nuspec):

<?xml version="1.0" encoding="utf-8"?>
<package>
    <metadata minClientVersion="3.3">
        <id>Hello.world</id>
        <version>1.0.0</version>
        <title>Greeting library</title>
        <authors>Timothy Klenke</authors>
        <description>Greetings for the world</description>
    </metadata>
    <contentFiles>
        <files include="*" />
    </contentFiles> 
</package>

Я запускаю из командной строки, используя следующее:

nuget.exe update -Self
nuget.exe pack Hello.world.nuspec

И я получаю следующее:

Автоопределение MSBuild: с использованием msbuild версии '14 .0 'из' C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin '. Попытка собрать пакет из Hello.world.nuspec. Элемент package в пространстве имен http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd 'имеет недопустимый дочерний элемент' contentFiles 'в пространстве имен' http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd '. Список возможных ожидаемых элементов: 'files' в пространстве имен 'http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd ».

Я думаю, что использую все последние версии, которые должны поддерживать новый XML-элемент contentFiles, но инструменты, похоже, не знают об этом. Что мне не хватает? Я знаю, что атрибут files include - это мусор, но есть ли у кого-нибудь полный пример файла nuspec с новым элементом contentFiles?


person Timothy Klenke    schedule 01.12.2015    source источник


Ответы (4)


Элемент <contentFiles> должен находиться внутри <metadata> согласно справочнику NuSpec. Так должно получиться так:

<?xml version="1.0" encoding="utf-8"?>
<package>
    <metadata minClientVersion="3.3">
        <id>Hello.world</id>
        <version>1.0.0</version>
        <title>Greeting library</title>
        <authors>Timothy Klenke</authors>
        <description>Greetings for the world</description>
        <contentFiles>
            <files include="*" />
        </contentFiles> 
    </metadata>
</package>
person Peter Smolinsky    schedule 02.12.2015
comment
Это обошло мою ошибку XSD. Спасибо. У меня все еще возникают проблемы с включением файла кода C # в качестве содержимого в решение ASP.NET 5. Есть ли какие-нибудь примеры полного файла примеров NUSPEC, который делает это? Я предполагаю, что элемент contentFiles и элемент files должны как-то использоваться в тандеме ?? - person Timothy Klenke; 02.12.2015
comment
Питер, я думаю, у тебя такая же проблема. Вы уже задавали этот вопрос: stackoverflow.com/questions/34045140/ - person Timothy Klenke; 03.12.2015

У меня есть пакет, который включает общий файл конфигурации. Это для корпоративного репозитория NuGet. Когда я добавляю пакет в проект, структура папки содержимого добавляется в папку пакета. Однако, когда я создаю проект, файл конфигурации не копируется в папку вывода (например, «\ Project \ bin \ Debug»).

Я пробовал следующие цели:

  • target = "содержимое \ любое \ любое"
  • target = "contentFiles \ any \ any"

Кроме того, я пробовал оба:

  • buildAction = "контент"
  • buildAction = "нет"

Вот соответствующие записи Nuspec:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>Utilities</id>
    ...
    <contentFiles>
      <files include="any/any/CommonAppConfig.config" buildAction="content" copyToOutput="true" flatten="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="Utilities.dll" target="lib\net452\Utilities.dll" />
    <file src="Utilities.pdb" target="lib\net452\Utilities.pdb" />
    <file src="CommonAppConfig.config" target="content\any\any" />
  </files>
</package>
person Joe Burns    schedule 01.05.2019
comment
У меня такая же проблема - person Eric Scherrer; 04.05.2020
comment
<file .. target="content\any\any" /> должно быть <file .. target="contentFiles\any\any" />: contentFiles! = Content. - person user2864740; 06.06.2020
comment
Он действительно угнал и? и не удалиться? - person Nick Turner; 19.06.2020

@Тимоти,

Ты был прав. Это комбинация, имеющая элемент metadata / contentFiles, а также определение в элементе files. У меня есть тестовая служебная библиотека C #, которая должна включать файлы PowerShell в папку вывода / bin проекта, когда на нее ссылаются с помощью PackageReference. Я включу для вас XML ниже. Я думаю, вы сможете извлечь из этого то, что вам нужно.

Специальное примечание: убедитесь, что вы указали значения вашего языка и фреймворка прямо в пути (т. е. у вас будет что-то вроде cs / net45 / YourFile.cs). Я использую any / any / MyFile.psm1, потому что хочу, чтобы файл рассматривался как независимый от языка и платформы. В противном случае я получаю ошибки анализа кода при сборке.

Кроме того, важно разместить файлы в каталоге contentFiles.

(параметры языка и платформы определены в справочной документации .nuspec) https://docs.microsoft.com/en-us/nuget/reference/nuspec#including-content-files

<package>
  <metadata>
    <id>SomeLibrary</id>
    <version>$version$</version>
    <title>SomeLibrary</title>
    <authors>Somebody</authors>
    <owners>Somebody</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Some library that does things I enjoy.</description>
    <releaseNotes />
    <copyright>Copyright 2017</copyright>
    <tags>PowerShell Testing</tags>
    <contentFiles>
      <files include="any/any/SomePS.psd1" buildAction="none" copyToOutput="true" />
      <files include="any/any/SomePS.psm1" buildAction="none" copyToOutput="true" />
    </contentFiles>
  </metadata>
  <files>
    <file src="*.dll" target="lib\net461" />
    <file src="*.pdb" target="lib\net461" />
    <file src="SomePS.psd1" target="contentFiles\any\any" />
    <file src="SomePS.psm1" target="contentFiles\any\any" />
  </files>
</package>
person user10000612    schedule 27.06.2018
comment
Я пробовал точно так же думать, я вижу свои файлы в каталоге contentFiles, но их нет в моем каталоге bin / x64 / Release. Я что-то пропустил ? - person Matthieu H; 31.03.2020

"/" Имеет значение в узле. Не получится, если использовать:

<files include="any/any/x.dll" buildAction="None" copyToOutput="true" flatten="true" />

Это должно быть:

<files include="any\any\x.dll" buildAction="None" copyToOutput="true" flatten="true" />

Но это не работает для .NET framework ??!

person Max    schedule 06.03.2020
comment
<files include="../../.." ..> работает в пакете dotnet от 2.1+. - person user2864740; 06.06.2020