Упаковка статического контента в 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
Установка игнорирует мое действие сборки.
Почему вы всегда пытаетесь скомпилировать мои файлы контента? Есть ли лучший способ добавить статический контент в потребительский проект?
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