Nupkg как добавить в visual studio
Для этого авторы шаблонов могут настроить NuGet для установки необходимых пакетов, а не отдельных библиотек. Позднее разработчики могут в любое время легко обновить эти пакеты.
Оставшаяся часть этого раздела посвящена конкретным шагам, которые следует предпринять при создании шаблона, чтобы правильно включить пакеты NuGet.
примеры
образец предварительно установленных пакетов доступен в репозитории NuGet/самплес на GitHub.
Добавление пакетов в шаблон
При создании шаблона вызывается мастер шаблонов для загрузки списка устанавливаемых пакетов, а также сведений об их расположении. Пакеты могут быть внедрены в VSIX, в шаблон или расположены на локальном жестком диске, в случае чего вы используете раздел реестра, чтобы сослаться на путь к файлу. Сведения об этих расположениях приведены ниже в этом разделе.
Предустановленные пакеты используют для работы мастеры шаблонов. Специальный мастер вызывается при создании экземпляра шаблона. Он загружает список пакетов, которые нужно установить, и передает эти сведения соответствующим API NuGet.
Шаги по включению пакетов в шаблон:
Добавьте в свой файл vstemplate ссылку на мастер шаблонов NuGet, добавив элемент WizardExtension :
NuGet.VisualStudio.Interop.dll — это сборка, содержащая только класс TemplateWizard , который представляет собой простую программу-оболочку, вызывающую фактическую реализацию в NuGet.VisualStudio.dll . Версия сборки не изменится, поэтому эти шаблоны проектов и элементов продолжат работать с новыми версиями NuGet.
Добавьте список устанавливаемых пакетов в проект:
Мастер поддерживает несколько элементов , что обеспечивает поддержку нескольких источников пакетов. Требуются оба атрибута id и version , то есть эта конкретная версия пакета будет установлена, даже если доступна более новая версия. Это не позволяет обновлениям пакета нарушить работу шаблона и предоставляет возможность обновить пакет разработчику, использующему шаблон.
Укажите репозиторий, где NuGet может найти пакеты, как описано в следующих разделах.
Репозиторий пакетов VSIX
Для развертывания шаблонов проектов и элементов Visual Studio рекомендуется использовать расширение VSIX, так как оно дает возможность упаковать вместе несколько шаблонов проектов или элементов и позволяет разработчикам легко находить ваши шаблоны с помощью диспетчера расширений VS или коллекции Visual Studio. Обновления для этого расширения также легко развернуть с помощью механизма автоматического обновления в диспетчере расширений Visual Studio.
Сам VSIX может служить источником необходимых шаблону пакетов:
Измените элемент в файле .vstemplate следующим образом:
Атрибут repository задает тип репозитория как extension , а repositoryId является уникальным идентификатором самого VSIX (это значение атрибута ID в файле vsixmanifest расширения, см. Справочник по схеме 2.0 расширения VSIX).
Поместите файлы nupkg в папку Packages внутри VSIX.
Добавьте нужные файлы пакетов как в файл vsixmanifest (см. Справочник по схеме 2.0 расширения VSIX).
Обратите внимание, что можно доставить пакеты в тот же VSIX, что и шаблоны проекта, либо поместить их в отдельный VSIX, если это лучше подходит для вашего сценария. Однако не следует ссылаться на любой VSIX, которым вы не управляете, так как изменения в этом расширении могут нарушить работу шаблона.
Репозиторий пакетов шаблонов
Если вы распространяете только один шаблон проектов или элементов и вам не нужно паковать вместе несколько шаблонов, можно использовать более простой, хотя и ограниченный, подход, включающий пакеты непосредственно в ZIP-файл шаблона проектов или элементов:
Измените элемент в файле .vstemplate следующим образом:
Атрибут repository имеет значение template , а атрибут repositoryId не является обязательным.
Поместите пакеты в корневую папку в ZIP-файле шаблона проектов или элементов.
Обратите внимание, что применение такого подхода для VSIX, содержащего несколько шаблонов, приводит к ненужному раздуванию, когда один или несколько пакетов являются общими для шаблонов. В таких случаях используйте VSIX в качестве репозитория, как описано в предыдущем разделе.
Путь к папке, указанный для реестра
Позвольте MSI установить пакеты на компьютере. Вы можете установить файлы .nupkg отдельно либо вместе с расширенным содержимым, которое позволяет пропустить один из шагов при использовании шаблона. В этом случае следуйте стандартной структуре папок NuGet, когда файлы .nupkg находятся в корневой папке, а каждый пакет имеет вложенную папку, имя которой состоит из пары идентификатора и версии.
Запишите раздел реестра для определения расположения пакета:
Добавьте в элемент в файле .vstemplate атрибут repository="registry" и укажите имя раздела реестра в атрибуте keyName .
Если вы заранее распаковали пакеты, используйте атрибут isPreunzipped="true" .
(NuGet 3.2+) Если вы хотите принудительно выполнить сборку времени разработки в конце установки пакета, добавьте атрибут forceDesignTimeBuild="true" .
Для оптимизации добавьте skipAssemblyReferences="true" , так как шаблон уже включает в себя необходимые ссылки.
Рекомендации
Объявите о зависимости от NuGet VSIX, добавив ссылку на него в манифесте VSIX:
Настройте сохранение шаблонов проектов и элементов при их создании, включив
Шаблоны не содержат файл packages.config , а также ссылки или содержимое, которое следует добавить при установке пакетов NuGet.
Если вы используете Visual Studio для Mac, ознакомьтесь с этими сведениями о создании пакета NuGet или примените средства CLI dotnet.
Предварительные требования
При необходимости установите CLI dotnet .
Создание проекта библиотеки классов
В Visual Studio выберите Файл Создать > Проект, разверните узел >, выберите шаблон "Библиотека классов (.NET Standard)", присвойте проекту имя AppLogger и нажмите кнопку >.
Щелкните правой кнопкой мыши полученный файл проекта и выберите пункт Сборка, чтобы убедиться, что проект создан правильно. Библиотека DLL находится в папке Debug (или папке Release, если вы используете конфигурацию выпуска для сборки).
В реальном пакете NuGet вы можете реализовать множество полезных возможностей, с помощью которых другие пользователи могут создавать приложения. Однако в этом пошаговом руководстве вы не будете писать дополнительный код, так как библиотеки классов из шаблона достаточно для создания пакета. Тем не менее, вы можете использовать функциональный код для пакета:
Настройка свойств пакета
Щелкните правой кнопкой мыши проект в обозреватель решений и выберите команду меню Свойства, а затем выберите вкладку Пакет.
Если пакет будет общедоступным, обратите особое внимание на свойство Теги, так как они помогают найти ваш пакет и понять его назначение.
Присвойте пакету уникальный идентификатор и заполните нужные свойства. Сведения о сопоставлении свойств MSBuild (проект в стиле SDK) со свойствами в NUSPEC-файле см. в разделе о целевых объектах пакета. Описание свойств см. в справочнике по NUSPEC-файлу. Все свойства добавляются в манифест .nuspec , который Visual Studio создает для проекта.
Необходимо присвоить пакету идентификатор, который будет уникальным на сайте nuget.org или другом используемом узле. При работе с этим руководством мы рекомендуем добавить к имени слово "Sample" или "Test", так как позже, после публикации, пакет станет общедоступным (хотя маловероятно, что кто-то будет его использовать).
Необязательно. Чтобы просматривать свойства непосредственно в файле проекта, щелкните правой кнопкой мыши проект в обозревателе решений и выберите Edit AppLogger.csproj (Изменить AppLogger.csproj).
Этот параметр доступен для проектов, использующих атрибут стиля пакета SDK, только в версиях начиная с Visual Studio 2017. Если у вас другой сценарий, щелкните проект правой кнопкой мыши и выберите пункт Выгрузить проект. Затем щелкните правой кнопкой мыши выгруженный проект и выберите команду изменения AppLogger.csproj.
Выполнение команды pack
Выберите конфигурацию Выпуск.
Щелкните проект правой кнопкой мыши в окне обозревателя решений и выберите команду Паковать:
(Необязательно) Создание пакета при сборке
Вы можете настроить в Visual Studio автоматическое создание пакета NuGet при сборке проекта.
В обозревателе решений щелкните правой кнопкой мыши проект и выберите пункт Свойства.
На вкладке Пакет выберите Создать пакет NuGet при сборке.
При автоматическом создании пакета время на упаковку увеличивает время сборки проекта.
(Необязательно) Упаковка с помощью MSBuild
В качестве альтернативы команде меню Pack в NuGet 4.x+ и MSBuild 15.1+ можно использовать целевой объект , когда проект содержит необходимые данные о пакете. Откройте командную строку, перейдите в папку проекта и запустите приведенную ниже команду. (В общем случае следует запустить Командную строку разработчика для Visual Studio из меню "Пуск", так как в этом случае настраиваются все необходимые пути для MSBuild.)
Дополнительные сведения см. в разделе Создание пакета с помощью MSBuild.
Публикация пакета
Получение ключа API
Выберите свое имя пользователя (в правом верхнем углу), а затем щелкните Ключи API.
После создания ключа выберите Копировать для получения ключа доступа, который требуется в интерфейсе командной строки:
Всегда держите свой ключ API в секрете! Рассматривайте свой ключ API как пароль, позволяющий любому пользователю управлять пакетами от вашего имени. Вам следует удалить или повторно создать свой ключ API, если он был случайно раскрыт.
Сохраните ключ в безопасном расположении, так как у вас больше не будет возможности скопировать ключ. Если вы вернетесь на страницу ключа API, вам понадобится повторно создать ключ, чтобы скопировать его. Кроме того, вы можете удалить ключ API, если больше не хотите отправлять пакеты.
Определение области позволяет создавать отдельные ключи API для разных целей. Ключи имеют срок действия. Кроме того, их можно привязать к определенным пакетам (или стандартным маскам). Каждый ключ также привязан к конкретным операциям: отправка новых пакетов и обновлений, отправка только обновлений или удаление из списка. Используя определение области, вы можете создавать ключи API разным пользователям, которые управляют пакетами организации. Это позволит предоставлять им только нужные разрешения. См. подробнее о ключах API в определении области.
Публикация с помощью CLI dotnet или CLI nuget.exe
Этот шаг — рекомендуемая альтернатива использования nuget.exe .
Перед публикацией пакета сначала нужно открыть командную строку.
Перейдите в папку, содержащую файл .nupkg .
Выполните следующую команду, указав имя пакета (уникальный идентификатор пакета) и заменив значение ключа ключом API:
dotnet отображает результаты публикации:
Дополнительные сведения см. в статье о команде dotnet nuget push.
Эту команду можно использовать вместо dotnet.exe .
Откройте командную строку и перейдите к папке с файлом .nupkg .
Выполните следующую команду, указав имя пакета (уникальный идентификатор пакета) и заменив значение ключа ключом API:
nuget.exe отображает результаты публикации:
Ознакомьтесь со сведениями о команде nuget push.
Ошибки публикации
Ошибки в результатах выполнения команды push обычно указывают на неполадку. Например, вы забыли обновить номер версии проекта и пытаетесь опубликовать пакет, который уже существует.
Ошибки также возникают при попытке опубликовать пакет с использованием идентификатора, который уже имеется на узле. Например, имя AppLogger уже существует. В этом случае команда push выдает следующую ошибку:
Управление опубликованным пакетом
Если при работе с этим пошаговым руководством был создан пакет, который не представляет пользы (например, пакет, созданный с использованием пустой библиотеки классов), следует исключить его из списка, чтобы он не отображался в результатах поиска:
Найдите пакет, который требуется исключить из списка, в разделе Published (Опубликованное) и щелкните значок корзины справа:
На следующей странице снимите флажок List (package-name) in search results (Вывести (имя пакета) в результатах поиска) и щелкните Save (Сохранить).
Добавление файла сведений и других файлов
Чтобы напрямую указать файлы, включаемые в пакет, измените файл проекта и используйте свойство content :
В корень пакета будет включен файл с именем readme.txt . Visual Studio отображает содержимое этого файла в виде обычного текста сразу после установки пакета напрямую. (Файлы сведений не отображаются для пакетов, устанавливаемых как зависимости.) Например, вот как выглядит файл сведений для пакета HtmlAgilityPack:
Обычное добавление файла readme.txt в корень проекта не приведет к включению его в итоговый пакет.
Это краткое руководство относится только к Visual Studio 2017 для Windows и более поздним версиям. Visual Studio для Mac не поддерживает описанные здесь функции. Используйте вместо этого средства интерфейса командной строки dotnet.
Предварительные требования
Установите интерфейс командной строки nuget.exe , скачав его на сайте nuget.exe , и сохраните этот файл .exe в подходящую папку. Добавьте эту папку в переменную среды PATH.
Создание проекта библиотеки классов
В Visual Studio выберите Файл Создать > Проект, разверните узел >, выберите шаблон "Библиотека классов (.NET Framework)", присвойте проекту имя AppLogger и нажмите кнопку ОК.
Щелкните правой кнопкой мыши полученный файл проекта и выберите пункт Сборка, чтобы убедиться, что проект создан правильно. Библиотека DLL находится в папке Debug (или папке Release, если вы используете конфигурацию выпуска для сборки).
Однако в этом пошаговом руководстве вы не будете писать дополнительный код, так как библиотеки классов из шаблона достаточно для создания пакета. Тем не менее, вы можете использовать функциональный код для пакета:
Настройка свойств проекта для пакета
Пакет NuGet содержит манифест (файл .nuspec ) с соответствующими метаданными, такими как идентификатор пакета, номер версии, описание и многое другое. Некоторые из них могут поступать напрямую из свойств проекта, в результате чего исчезает необходимость изменять их как в проекте, так и в манифесте. Этот раздел описывает, где можно задать соответствующие свойства.
Выберите команду меню Проект Свойства, а затем щелкните вкладку Приложение.
В поле Имя сборки укажите уникальный идентификатор пакета.
Необходимо присвоить пакету идентификатор, который будет уникальным на сайте nuget.org или другом используемом узле. При работе с этим руководством мы рекомендуем добавить к имени слово "Sample" или "Test", так как позже, после публикации, пакет станет общедоступным (хотя маловероятно, что кто-то будет его использовать).
Необязательно. Чтобы просмотреть или изменить свойства напрямую, откройте файл Properties/AssemblyInfo.cs в проекте.
Задав свойства, укажите для конфигурацию проекта значение Выпуск и перестройте проект для создания обновленной библиотеки DLL.
Создание начального манифеста
Получив библиотеку DLL и задав свойства проекта, вы можете использовать команду nuget spec , чтобы создать начальный файл .nuspec из проекта. Этот шаг включает в себя соответствующие токены замены для получения сведений из файла проекта.
Запускать nuget spec для создания начального манифеста потребуется всего один раз. При обновлении пакета нужно либо изменить значения в проекте, либо отредактировать сам файл манифеста.
Откройте командную строку и перейдите в папку проекта, содержащую файл AppLogger.csproj .
Выполните следующую команду: nuget spec AppLogger.csproj . После указания проекта NuGet создает манифест с тем же именем, что и проект, в данном случае это AppLogger.nuspec . Он также включает в себя токены замены из манифеста.
Откройте файл AppLogger.nuspec в текстовом редакторе для просмотра его содержимого, которое должно иметь следующий вид.
Изменение манифеста
NuGet выдает ошибку при попытке создать пакет со значениями по умолчанию в вашем файле .nuspec , поэтому перед продолжением нужно изменить следующие поля. Их использование описано в разделе о необязательных элементах метаданных в справочнике по файлу NUSPEC.
- licenseUrl
- projectUrl
- iconUrl
- releaseNotes
- tags
Кроме того, сейчас можно добавить в манифест любые другие элементы, как описано в разделе Справочник по файлу NUSPEC.
Сохраните файл, прежде чем продолжить.
Выполнение команды pack
Из командной строки перейдите в папку, содержащую файл .nuspec , и выполните команду nuget pack .
NuGet создает в текущей папке файл .nupkg формата .nupkg .
Публикация пакета
Получение ключа API
Выберите свое имя пользователя (в правом верхнем углу), а затем щелкните Ключи API.
После создания ключа выберите Копировать для получения ключа доступа, который требуется в интерфейсе командной строки:
Всегда держите свой ключ API в секрете! Рассматривайте свой ключ API как пароль, позволяющий любому пользователю управлять пакетами от вашего имени. Вам следует удалить или повторно создать свой ключ API, если он был случайно раскрыт.
Сохраните ключ в безопасном расположении, так как у вас больше не будет возможности скопировать ключ. Если вы вернетесь на страницу ключа API, вам понадобится повторно создать ключ, чтобы скопировать его. Кроме того, вы можете удалить ключ API, если больше не хотите отправлять пакеты.
Определение области позволяет создавать отдельные ключи API для разных целей. Ключи имеют срок действия. Кроме того, их можно привязать к определенным пакетам (или стандартным маскам). Каждый ключ также привязан к конкретным операциям: отправка новых пакетов и обновлений, отправка только обновлений или удаление из списка. Используя определение области, вы можете создавать ключи API разным пользователям, которые управляют пакетами организации. Это позволит предоставлять им только нужные разрешения. См. подробнее о ключах API в определении области.
Публикация с помощью команды nuget push
Откройте командную строку и перейдите к папке с файлом .nupkg .
Выполните следующую команду, указав имя пакета и заменив значение ключа на ключ API:
nuget.exe отображает результаты публикации:
Ознакомьтесь со сведениями о команде nuget push.
Ошибки публикации
Ошибки в результатах выполнения команды push обычно указывают на неполадку. Например, вы забыли обновить номер версии проекта и пытаетесь опубликовать пакет, который уже существует.
Ошибки также возникают при попытке опубликовать пакет с использованием идентификатора, который уже имеется на узле. Например, имя AppLogger уже существует. В этом случае команда push выдает следующую ошибку:
Управление опубликованным пакетом
Если при работе с этим пошаговым руководством был создан пакет, который не представляет пользы (например, пакет, созданный с использованием пустой библиотеки классов), следует исключить его из списка, чтобы он не отображался в результатах поиска:
Найдите пакет, который требуется исключить из списка, в разделе Published (Опубликованное) и щелкните значок корзины справа:
На следующей странице снимите флажок List (package-name) in search results (Вывести (имя пакета) в результатах поиска) и щелкните Save (Сохранить).
10 Answers 10
Menu Tools → Options → Package Manager
Give a name and folder location. Click OK. Drop your NuGet package files in that folder.
Go to your Project in Solution Explorer, right click and select "Manage NuGet Packages". Select your new package source.
Actually, I have done step 1 a few times. But my package is not showing up in step 2, when I open up to view Installed packages, Updates or Recent packages.
On my screen, I only have "All" under "Installed packages" not the "NuGet offical package source", not my custom "newNuget", they are missing.
I am using vs2010. Trying to download and install latest nuget from their homepage just now. Download click next next. then error. M$ as expected, there is a link of known issues, checked that, says signature mismatch then I need to uninstall the existing nuget and it is easy fix. fine, do that. When I restart computer and do install again, same error comes back, signature mismatch. so now I am stuck with the old version gone, new version doesn't want to install.
Problem fixed. I uninstalled nuget from windows -> control panel. It didn't work that way. I needed to start up VS and go into Tools->Extension Manager . then hit uninstall nuget from there. Restarted VS. Then went to install nuget again, it worked. Now, the local nupkg files are showing up, too (edit: they are in the Online tab, not the Installed tab, my mistake in the picture I post). Thanks for the help :)
I don't have enough reputation to comment yet - but to answer Michael in the accepted answer comments about VS2015 still wanting to go online. I had the same issue, but in the options, if you untick all the online sources it works for the offline ones. nuget Options pic
You can also use the Package Manager Console and invoke the Install-Package cmdlet by specifying the path to the directory that contains the package file in the -Source parameter:
Yes. The -Source option is available in nuget.exe as well. For example: nuget install SomePackage -Source C:\PathToThePackageDir
You might need to specify the -IncludePrerelease flag as well. Otherwise, if the package version has a dash-suffix (e.g "-beta1"), Install-Package won't find it.
For .nupkg files I like to use:
@RenniePet that worked for me in VS2017 (but I had already placed my .nupkg under the same directory every other packages were stored)
It is not working for me, I am using VS2013 Version 12.0.21..5 and Nuget package manager 2.12.0.817 :(
For Visual Studio 2017 and its new .csproj format
You can no longer just use Install-Package to point to a local file. (That's likely because the PackageReference element doesn't support file paths; it only allows you to specify the package's Id.)
You first have to tell Visual Studio about the location of your package, and then you can add it to a project. What most people do is go into the NuGet Package Manager and add the local folder as a source (menu Tools → Options → NuGet Package Manager → Package Sources). But that means your dependency's location isn't committed (to version-control) with the rest of your codebase.
Local NuGet packages using a relative path
This will add a package source that only applies to a specific solution, and you can use relative paths.
You need to create a nuget.config file in the same directory as your .sln file. Configure the file with the package source(s) you want. When you next open the solution in Visual Studio 2017, any .nupkg files from those source folders will be available. (You'll see the source(s) listed in the Package Manager, and you'll find the packages on the "Browse" tab when you're managing packages for a project.)
Here's an example nuget.config to get you started:
Backstory
My use case for this functionality is that I have multiple instances of a single code repository on my machine. There's a shared library within the codebase that's published/deployed as a .nupkg file. This approach allows the various dependent solutions throughout our codebase to use the package within the same repository instance. Also, someone with a fresh install of Visual Studio 2017 can just checkout the code wherever they want, and the dependent solutions will successfully restore and build.
меню инструменты → опции → Диспетчер Пакетов
Укажите имя и расположение папки. нажимать OK. Поместите файлы пакета NuGet в эту папку.
перейдите к своему проекту, щелкните правой кнопкой мыши и выберите "Управление Пакетами NuGet" и выберите новый исходный пакет.
вы также можете использовать Консоль Диспетчера Пакетов и вызвать , указав путь к каталогу, содержащему файл пакета в
For .nupkg файлов мне нравится использовать:
-
добавьте файлы в папку с именем LocalPackages рядом с вами решение (его не нужно называть так, но настройте xml на следующем шаге соответственно)
создайте файл с именем NuGet.config рядом с файлом решения со следующим содержимым
если решение открыто в Visual Studio, закройте его и откройте повторно.
теперь ваши пакеты должны появиться в браузере, или быть устанавливаемый с помощью Install-Package
Если у вас есть .nupkg файл и нужен .dll файл все, что вам нужно сделать, это изменить расширение .zip и найдите каталог lib.
вы больше не можете просто использовать Install-Package для указания на локальный файл. (Это, вероятно, потому что PackageReference элемент не поддерживает пути к файлам; он позволяет только указать идентификатор пакета.)
сначала вы должны рассказать VS о местоположении вашего пакета, затем вы можете добавить его в проект. Большинство людей входят в Диспетчер пакетов NuGet и добавляют локальную папку в качестве источника (Инструменты > > Параметры >> Менеджер Пакетов NuGet > > Источники Пакетов). Но это означает, что местоположение вашей зависимости не зафиксировано (для управления версиями) с остальной частью вашей кодовой базы.
локальные пакеты NuGet с использованием относительного пути
это добавит источник пакета, который применяется только к определенному решению, и вы можете использовать относительные пути.
что вам нужно сделать, это создать nuget.config файл в том же каталоге, что и ваш . Настройте файл с помощью пакета source(s) you хотеть. Когда вы в следующий раз откроете решение в VS2017, любое .файлы nupkg из этих исходных папок будут доступны. (Вы увидите источник (ы), перечисленные в Диспетчере пакетов, и вы найдете пакеты на вкладке "Обзор", когда вы управляете пакетами для проекта.)
вот пример nuget.config для начала:
Предыстория
мой вариант использования этой функции заключается в том, что у меня есть несколько экземпляров одного репозитория кода на моей машине. В базе кода есть общая библиотека, которая публикуется / развертывается как a .nupkg файл. Этот подход позволяет различным зависимым решениям в нашей кодовой базе использовать пакет в одном экземпляре РЕПО. Кроме того, кто-то со свежей установкой VS2017 может просто проверить код, где они хотят, и зависимые решения будут успешно восстановлены и построены.
Читайте также: