#asp.net #visual-studio #nuget #nuget-package
#asp.net #visual-studio #nuget #nuget-пакет
Вопрос:
У меня есть мультипроект ASP.NET Прикладное решение Web Forms. Мне нужно предоставить общий доступ к главной странице (3 файла), некоторым пользовательским элементам управления и некоторым изображениям, скриптам и CSS-файлам для других проектов в решении.
Я уже создал пакет, используя NuGet Package Explorer в соответствии с документацией:
http://docs.nuget.org/docs/creating-packages/using-a-gui-to-build-packages
Моя текущая проблема заключается в следующем: я обновил общие файлы в корневом проекте, и теперь я хочу обновить пакет, прежде чем переносить его в другие проекты (пакет в настоящее время находится в локальной папке на моем компьютере разработчика). Как мне это сделать?
Если у кого-нибудь есть ссылки на NuGet для быстрого начала работы, пожалуйста, поделитесь, поскольку официальные документы просто не делают этого за меня.
Ответ №1:
создайте пакет снова с новой версией, например, если исходная версия 1.0, сделайте это 1.1, и NuGet получит обновление.
Комментарии:
1. Даст вам шанс… но нужно ли на самом деле «создавать» его снова, а не «обновлять» его?
2. Понятия «Обновление» пакета не существует… Вы можете просто открыть пакет в проводнике пакетов, отредактировать пакет и сохранить его 🙂
3. Хорошо, обновили и сохранили его. Но когда я пытаюсь добавить ссылку на пакет библиотеки в подпроект, обновление не отображается в графическом интерфейсе; Я вижу «MyPackage» в списке установленных пакетов, но обновление пакета не отображается…
4. Думал, у меня получилось… пришлось нажать на верхнюю ссылку «Установленные пакеты» в главном проекте, чтобы заставить его работать там. Графический интерфейс действительно неровный. 1.1 отображается как установленный в подпроекте в консоли PM… но .nuspec все еще показывает 1.0??
5. Помечаю это как ответ … все еще не удовлетворен документами NuGet :-/
Ответ №2:
Файл 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);
}
}
Ответ №3:
Вы спрашиваете, что вам нужно сделать, чтобы обновить проекты, которые уже используют пакет?
Ключевым моментом в такого рода сценариях является простое управление версиями. Новая версия файла будет удалена. Снова соберите пакет с новым номером версии, а затем запустите Update-Package из консоли диспетчера пакетов в VS.
Возможно, вы также захотите рассмотреть пару отдельных пакетов, а не один обычный. Если вы хотите обновить пару изображений или CSS-файл, но не главную страницу, возможно, лучше всего использовать пару изображений меньшего размера.
Используйте PM Explorer (из упомянутого вами поста), чтобы открыть пару пакетов из основного репозитория NuGet, в частности, jQuery 1.5.1 и 1.6.x, и посмотрите, поскольку они будут делать очень похожие вещи. Никакой настоящей магии не требуется!
Приветствия.
Комментарии:
1. Только что попробовал это из командной строки PM: Обновить-Пакет MyPackage -Версия 1.1 -Исходный код C:VS2010 и получил это: нет доступных обновлений для ‘MyPackage’.
2. Итак, давайте проверим пару вещей: является ли ваш скомпилированный пакет в c:vs2010 ? Какая версия у вас установлена в данный момент (введите Get-Package для подтверждения)? Отличается ли версия вашего нового пакета от той, что у вас есть? Кроме того, вы имеете в виду консоль диспетчера пакетов или командную строку nuget?
3. Не скомпилированный пакет, все в папке содержимого, включая основные и вспомогательные файлы — успешно компилируется в dest. project. 1.0 до 1.1 обновление не сработало — все еще отображается 1.0. С помощью консоли PM — когда я буду использовать Nuget.exe через консоль PM?
Ответ №4:
Я уже делал это раньше. Вам просто нужно увеличить версию вашего пакета внутри метаданных файла .nuspec.
В моем случае имена моих пакетов ‘[name].[версия].nupkg‘ поэтому я сохраняю свой новый пакет как ‘[имя].Также [версия 1].nupkg.
Обновление появляется в разделе «Управление обновлениями пакетов nuget».