Упаковка статического контента в Nuget для проектов PackageReferece



У меня есть проект библиотеки классов (net47), и я хотел бы упаковать в nuget мою dll и несколько файлов статического контента (js, css, images...). Я хочу использовать эту dll и контент из потребительских проектов. Эти проекты будут проектами MVC PackageReference. В этих проектах локальные статические файлы находятся в папке wwwroot.



Я пробовал это: NuGet ContentFiles Demystified но я получаю ссылки на мои файлы js и css (они не копируются в мой проект содержание).



В моем nuspec я пробовал использовать все параметры сборки: EmbeddedResource, Content, None и Compile, но эти ссылки всегда импортируются в режиме компиляции. Поэтому я получаю ошибку компиляции, когда начинаю отладку.



Я знаю, что это было возможно с пакетом.config проекты и это очень просто, но все мои потребительские проекты будут PackageReference.



Это мой nuspec



<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors>My</authors>
<owners>My</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>LVP</description>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
<contentFiles>
<files include="any/any/bd.js" buildAction="content" flatten="true" copyToOutput="false"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/bd.js" target="contentFiles/any/any/bd.js" />
</files>
</package>


Я упаковываю свой nuget с помощью этой команды powershell:



nuget pack MyProject.nuspec


Хотя у меня тоже есть пробовал с помощью csproj:



nuget pack MyProject.csproj


И моя исходная структура папок такова:



C:...[projectPath]...contentFilesanyanybd.js


Установка игнорирует мое действие сборки.
Почему вы всегда пытаетесь скомпилировать мои файлы контента? Есть ли лучший способ добавить статический контент в потребительский проект?

694   1  

1 ответ:

Установка игнорирует мое действие сборки. Почему вы всегда пытаетесь скомпилировать мои файлы контента? Есть ли лучший способ добавить статический контент в потребительский проект?

Чтобы ответить на ваш предыдущий вопрос упаковка файлов в nuget , я создал пример пакета nuget и установил действие сборки в content для файлов содержимого, после установки этого пакета nuget действие сборки будет установлено content:

Введите описание изображения здесь

Затем я проверил ваш .nuspec файл, найденный должен быть правильным. Таким образом, проблема не связана с вашим файлом .nuspec.

Кроме , на приведенном выше изображении вы заметите, что путь к файлу содержимого-это локальный кэш nuget:

C:\Users\<UserName>\.nuget\packages\

NuGet сначала извлекает пакет nuget из локального кэша при установке пакета nuget , чтобы избежать загрузки пакетов, которые уже находятся на компьютере. В других палатах, хотя мы обновили пакет nuget в локальном, nuget обнаружит во-первых, если он нашел тот же пакет в кэше, nuget установит его из кэша, а не из локального канала.

Чтобы устранить эту проблему, пожалуйста, попробуйте удалить пакет nuget в локальном кэше перед установкой обновленного пакета nuget.Как правило, когда мы снова упаковываем один и тот же пакет, мыd better change the package version in the.nuspec ' файл, так что nuget локальный кэш не будет ловить их.

Обновление для комментария:

Я попробовал увеличить номер версии и удаление кэша nuget, и проблема сохраняется. Мое действие сборки всегда имеет значение " компилятор C#". Я просто попытался изменить имя файла js, и проект импортирует новое имя, поэтому я не думаю, что это проблема кэша

После тестирования вашего пакета nuget я нашел причину, по которой вы получаете эту проблему, мы должны сохранить путь src и target пути одинаковы в файле .nuspec . Так как вы хотите установить файл содержимого в папку wwwroot, вы должны установить файл в папке wwwroot папка, затем упакуйте .nuspec:

<contentFiles>
  <files include="any/any/wwwroot/css/bd.css" buildAction="Content" copyToOutput="false" flatten="true" />
  <files include="any/any/wwwroot/js/bd.js" buildAction="Content" copyToOutput="false" flatten="true" />
</contentFiles>

Введите описание изображения здесь

Введите описание изображения здесь

Следуя в моем .скрипты nuspec (не требуется узел содержимого):

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>BancaDigitalViewProvider</id>
    <version>1.0.37</version>
    <authors>Ibercaja</authors>
    <owners>Ibercaja</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Login View Provider</description>
    <copyright>Copyright 2018</copyright>
    <tags>Banca Digital View Provider</tags>
    <dependencies />
    <contentFiles>
      <files include="any/any/wwwroot/css/bd.css" buildAction="Content" copyToOutput="false" flatten="true" />
      <files include="any/any/wwwroot/js/bd.js" buildAction="Content" copyToOutput="false" flatten="true" />
    </contentFiles>
  </metadata>

  <files>
    <file src="contentFiles/any/any/wwwroot/css/bd.css" target="contentFiles/any/any/wwwroot/css/bd.css" />
    <file src="contentFiles/any/any/wwwroot/js/bd.js" target="contentFiles/any/any/wwwroot/js/bd.js" />
    <file src="bin\debug\BancaDigitalViewProvider.dll" target="lib\net47\BancaDigitalViewProvider.dll" />
  </files>
</package>

Это пакет nuget:

Https://1drv.ms/u/s! Ai1sp_yvodHfhTk5xutPpaBZLC-A

Вы можете скачать его и протестировать.

Затем установите его на ASP.NET основной проект MVC:

Введите описание изображения здесь Надеюсь, это поможет.

Comments

    Ничего не найдено.