Как из nupkg сделать dll
Я уже рассматривал вопрос о том, как создать собственный Nuget-сервер и как создать Nuget-пакет с помощью графической утилиты. На этот раз я расскажу как сделать то же самое, используя только консольную утилиту nuget.exe .
Необходимость использовать консольную утилиту может появиться тогда, когда нам нужно встроить сборку пакетов в процесс автоматической сборки проекта. В этих случаях использование графической утилиты становится малореальным.
nuget.exe
Для работы нам потребуется консольная утилита nuget.exe , которую можно загрузить с официального сайта. Описание работы с этой утилитой можно найти здесь.
Создание пакета
Создать пакет в этом случае можно разными способами.
Если вам требуется создать простой пакет, где будет содержаться одна сборка можно воспользоваться следующей командой:
Эта команда создаст файл манифеста ( nuspec ), необходимого для создания пакета.
В более сложных случаях, когда в пакете содержится множество файлов и скриптов по установке, можно создать этот файл самостоятельно (спецификация nuspec ), так же как и структуру папок.
Другим вариантом будет использование графической утилиты, в которой существует опция Export :
nuget pack MyPackage . 1 . 0 . 0 . nuspec
В результате работы этой утилиты мы получим файл nupkg , который готов к публикации на сервере. По сути, файл nupkg — это ZIP-архив, внутри которого находится всё содержимое пакета в установленном формате.
Публикация пакета
Для публикации пакета необходимо использовать следующую команду nuget.exe :
Как видно из формата команды, мы указываем имя пакета, ключ сервера и адрес сервера.
Если мы всё время работаем с одним и тем же nuget-сервером, то эти параметры можно определить в конфигурационном файле, который расположен по указанному пути — %AppData%\NuGet\NuGet.config .
В этом случае команда по публикации будет немного короче:
В этом случае вы также можете использовать сокращенный синтаксис команды. Как можно догадаться, в этом случае будут просто изменены параметры в конфигурационном файле.
меню инструменты → опции → Диспетчер Пакетов
Укажите имя и расположение папки. нажимать 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 может просто проверить код, где они хотят, и зависимые решения будут успешно восстановлены и построены.
Если MaxResults является свойством then no, он не будет его оптимизировать, потому что геттер может иметь сложную логику, например:
Посмотрите, как поведение изменится, если оно будет в строке ваш код?
Если нет никакой логики . любой метод, который вы написали, в порядке, это очень маленькая разница и все о том, насколько читаемо это вам (или вашей команде) . вы один смотрел на него.
Меню Инструменты → Опции → Диспетчер пакетов
Укажите имя и местоположение папки. Нажмите ОК. Удалите файлы пакета NuGet в эту папку.
Перейдите в свой проект, щелкните правой кнопкой мыши и выберите «Управление пакетами NuGet» и выберите новый источник пакета.
Для Visual Studio 2017 и его нового формата .csproj
Вы больше не можете просто использовать Install-Package для указания на локальный файл. (Вероятно, это связано с тем, что элемент PackageReference не поддерживает пути к файлам; он позволяет вам только указать идентификатор пакета.)
Сначала вы должны сообщить Visual Studio о расположении вашего пакета, а затем можете добавить его в проект. Большинство людей делают это в диспетчере пакетов NuGet и добавляют локальную папку в качестве источника (меню Сервис → Параметры → Диспетчер пакетов NuGet → Пакетные источники ). Но это означает, что местоположение вашей зависимости не передается (для контроля версий) с остальной частью вашей кодовой базы.
Локальные пакеты NuGet, использующие относительный путь
Это добавит источник пакета, который применяется только к конкретному решению, и вы можете использовать относительные пути.
Вам необходимо создать файл nuget.config в том же каталоге, что и ваш файл .sln . Сконфигурируйте файл с нужными источниками пакетов. Когда вы в следующий раз откроете решение в Visual & nbsp; Studio & nbsp; 2017, будут доступны любые файлы .nupkg из этих исходных папок. (Вы увидите источники, перечисленные в Диспетчере пакетов, и найдете пакеты на вкладке «Обзор» при управлении пакетами для проекта.)
Вот пример nuget.config чтобы начать работу:
Backstory
Мой вариант использования этой функции заключается в том, что у меня есть несколько экземпляров одного репозитория кода на моей машине. В базе кода есть общая библиотека, которая опубликована / развернута в виде файла .nupkg. Этот подход позволяет различным зависимым решениям в нашей кодовой базе использовать пакет в одном и том же экземпляре репозитория. Кроме того, кто-то с новой версией Visual & nbsp; 2017 может просто извлекать код там, где он хочет, и зависимые решения будут успешно восстановлены и собраны.
Я хочу создать единый пакет NuGet, который содержит пакеты MyLibrary.Core.dll и MyLibrary.Extensions.dll. Я не могу понять, как заставить NuGet сделать это. Я попытался создать спецификационный файл вручную, и я попытался построить его с помощью "nuget spec MyLibrary.Core.csproj". Я попытался добавить все библиотеки DLL в папку lib/, которая, как я понимаю, является условным механизмом для добавления DLL в пакет. В каждом случае я могу получить MyLibary.Core.dll, чтобы попасть в пакет, но MyLibrary.Extensions.dll не упакован вместе с ним.
TL;DR: Какова наилучшая практика для создания пакета NuGet с несколькими проектами/сборками? Есть ли учебник, который фокусируется на этом? Учебники, которые я нашел, сосредоточены на простых демонстрациях с одним проектом.
Вы запускаете NuGet для одного проекта (или файла nuspec), но он поддерживает указатели на другие проекты с помощью элемента file . Этот элемент использует имена ваших ссылок на проект, поэтому вы избегаете: a) находить местоположение других файлов проекта и b) копировать файлы в определенное место в качестве этапа после сборки.
Предположим, что у вас есть файл nuspec для MyLibrary.Core.csproj, и он ссылается на MyLibrary.Extensions и MyLibrary.Tests, чтобы они закончите в каталоге bin после сборки:
С помощью этой настройки все ваши ссылки должны оказаться в соответствующем месте в пакете NuGet. У вас все еще есть жестко закодированная "Release", но я бы, скорее всего, не распределял пакеты NuGet своих отладочных сборников.
Создал ли пустой файл nuspec с помощью:
Если вы используете этот файл, а затем поместите свои DLL в папку под ним с именем lib, он упакует их.
У меня была небольшая проблема с попыткой создания файла nuspec из проекта или dll. Кроме того, если вы вручную ссылаетесь на любые файлы в файле nuspec, соглашения не используются. Это, вероятно, проблема с nuspecs, сгенерированными из DLL или проектов.
Кроме того, если вы пытаетесь запустить это из сборки script, которая выполняется в другой папке, вы можете указать nuget расположение вашей. \lib папки через командную строку -BasePath:
Читайте также: