Обновление файлов в существующем пакете Nuget

У меня есть многопроектное решение ASP.NET Web Forms Application. Мне нужно поделиться главной страницей (3 файла), некоторыми пользовательскими элементами управления и некоторыми изображениями, сценариями и файлами CSS для других проектов в решении.

Я уже создал пакет с помощью обозревателя пакетов NuGet в соответствии с документацией:

http://docs.nuget.org/docs/creating-packages/using-a-gui-to-build-packages

Моя текущая проблема заключается в следующем: я обновил общие файлы в корневом проекте и теперь хочу обновить пакет, прежде чем вставлять его в другие проекты (пакет в настоящее время находится в локальной папке на моей машине разработки). Как мне это сделать?

Если у кого-то есть ссылки NuGet для быстрого начала работы, поделитесь, пожалуйста, поскольку официальные документы просто не делают этого для меня.


person IrishChieftain    schedule 09.06.2011    source источник


Ответы (4)


создайте пакет снова с новой версией, иначе говоря, если исходная версия 1.0, сделайте это 1.1, и NuGet подберет обновление.

person Matthew M. Osborn    schedule 09.06.2011
comment
Попробую... но нужно ли создавать его снова, а не обновлять? - person IrishChieftain; 10.06.2011
comment
Нет концепции обновления пакета... Вы можете просто открыть пакет в проводнике пакетов, отредактировать пакет и сохранить его :) - person Matthew M. Osborn; 10.06.2011
comment
Хорошо, обновил и сохранил. Но когда я пытаюсь добавить ссылку на пакет библиотеки в подпроект, обновление не отображается в графическом интерфейсе; Я вижу MyPackage в списке установленных пакетов, но обновление пакета не отображается... - person IrishChieftain; 10.06.2011
comment
Думал, что у меня это работает ... пришлось щелкнуть верхнюю ссылку «Установленные пакеты» в основном проекте, чтобы заставить ее работать там. GUI действительно глючит. 1.1 отображается как установленный в подпроекте в консоли PM... но .nuspec все еще показывает 1.0?? - person IrishChieftain; 10.06.2011
comment
Отмечая это как ответ... все еще не удовлетворен документами NuGet: -/ - person IrishChieftain; 13.06.2011
comment
Мне жаль! Можете ли вы опубликовать где-нибудь копию проблемы, которую вы видите, чтобы я мог получить лучшую идею? Кроме того, если вы считаете, что чего-то не хватает, отправьте сообщение об ошибке для документации NuGet (nugetdocs.codeplex. com/workitem/list/basic) И, возможно, вы также можете исправить проблему и отправить запрос на включение ;) - person Matthew M. Osborn; 14.06.2011
comment
IrishChieftain, фундаментальным предикатом управления пакетами является то, что пакеты неизменяемы — они предназначены для того, чтобы их нельзя было изменить после создания. - person Matthew Skelton; 07.02.2014

Файл NuGet в конечном итоге представляет собой просто zip-файл. Вы можете обновлять записи, используя все, что может обновить zip-файл. Например, что-то вроде

using System.IO.Compression;
using System.IO.Compression.FileSystem;

// EG: AddOrUpdateZipEntry("mypackage.nupkg", "my.dll", "bin/my.dll")
void AddOrUpdateZipEntry(string zipFilePath, string contentsFilePath, string entryPathInZip)
{
    using (var zip = ZipFile.Open(zipFilePath, ZipArchiveMode.Update))
    {
        zip.GetEntry(entryPathInZip)?.Delete(); // Remove any existing entry first.
        zip.CreateEntryFromFile(contentsFilePath, entryPathInZip);
    }
}
person Sean Kearon    schedule 02.07.2019

Вы спрашиваете, что вам нужно сделать, чтобы обновить проекты, которые уже используют пакет?

Ключевым моментом в таком сценарии является просто управление версиями. Новая версия файла будет добавлена. Снова соберите пакет с новым номером версии, а затем запустите Update-Package из консоли диспетчера пакетов в VS.

Вы также можете рассмотреть пару незаметных пакетов, а не один прямой. Если вы хотите обновить пару изображений или файл CSS, но не мастер-страницу, лучше всего иметь пару меньших.

Используйте PM Explorer (из упомянутого вами поста), чтобы открыть пару пакетов из основного репозитория NuGet, в частности, jQuery 1.5.1 и 1.6.x, и посмотрите, так как они будут делать очень похожие вещи. Никакой настоящей магии не нужно!

Ваше здоровье.

person MisterJames    schedule 09.06.2011
comment
Только что попробовал это из командной строки PM: Update-Package MyPackage -Version 1.1 -Source C:\VS2010 и получил это: Нет доступных обновлений для «MyPackage». - person IrishChieftain; 10.06.2011
comment
Итак, давайте проверим пару вещей: находится ли ваш скомпилированный пакет в c:\vs2010? Какая версия у вас сейчас установлена ​​(наберите Get-Package для подтверждения)? Версия вашего нового пакета отличается от той, что у вас есть? Кроме того, вы имеете в виду консоль диспетчера пакетов или командную строку nuget? - person MisterJames; 10.06.2011
comment
Не скомпилированный пакет, все в папке с содержимым, в т.ч. master и вспомогательные файлы - успешно компилируются в dest. проект. Обновление с 1.0 до 1.1 не помогло - все равно показывает 1.0. Использование консоли PM — когда я буду использовать Nuget.exe поверх консоли PM? - person IrishChieftain; 10.06.2011

Я уже делал это раньше. Вам просто нужно увеличить версию вашего пакета внутри метаданных файла .nuspec.

В моем случае имена моих пакетов — «[имя].[версия].nupkg», поэтому я сохраняю свой новый пакет как «[имя].[версия +1].nupkg'.

Обновление появляется в разделе обновлений «Управление пакетами nuget».

person DeBorges    schedule 24.02.2015