Как я могу обновить пакет до предыдущей версии в консоли диспетчера пакетов?

В моем проекте установлена ​​версия пакета, но во время тестирования я обнаружил в нем проблему. Я пробовал очевидную вещь Update-Package -Id Foo.Bar -Version 1.0.0 -Force, но командлет Update-Package не имеет параметра -Force и не позволяет обновлять более раннюю версию. Как мне понизить версию зависимостей моего пакета (без использования системы контроля версий!)


ПРИМЕЧАНИЕ. Этот вопрос теперь неактуален, поскольку Update-Package MyPackage -Version [an earlier version] работает "из коробки" в последних версиях диспетчера пакетов NuGet. Вам даже не нужен -Force переключатель.


person Damian Powell    schedule 01.02.2012    source источник
comment
+1 за обновление два года спустя.   -  person MEMark    schedule 25.08.2014


Ответы (3)


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

function Reinstall-Package {

    param(
        [Parameter(Mandatory = $true)]
        [string]
        $Id,

        [Parameter(Mandatory = $true)]
        [string]
        $Version,

        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [string]
        $ProjectName,

        [switch]
        $Force
    )

    if (-not $ProjectName) {
        $ProjectName = (get-project).ProjectName
    }

    Uninstall-Package -ProjectName $ProjectName -Id $Id -Force:$Force
    Install-Package -ProjectName $ProjectName -Id $Id -Version $Version

}

Это позволяет нам использовать такой вызов, чтобы обновить все ссылки на пакет в текущем решении.

 Get-Project -All |
     ?{ $_ | Get-Package | ?{ $_.Id -eq 'Foo.Bar' } } |
         %{ $_ | Reinstall-Package -Id Foo.Bar -version 1.0.0 -Force }

Ключ -Force позволяет переустановить пакет, даже если в проекте есть зависимые пакеты.

person Damian Powell    schedule 01.02.2012
comment
У меня не было проблем с созданием функции, но, тем не менее, функция прояснила, как это сделать из консоли PM. Спасибо! - person Marc L.; 23.03.2012
comment
Для тех, кто не знает. Также добавьте функцию в консоль диспетчера пакетов, добавьте NuGet_profile.ps1 в ‹MyDoc› \ WindowsPowerShell - person AdamSane; 25.09.2012
comment
Хорошая мысль, @AdamSane. Другой способ редактирования вашего профиля, который работает на любом хосте PowerShell, - echo '' >> $profile; notepad $profile. Это создаст профиль, если он не существует (или добавит пустую строку в конец, если он есть), а затем откроет файл в блокноте. - person Damian Powell; 26.09.2012
comment
Не могли бы вы добавить еще немного разъяснений, Дамиан? И, возможно, еще одна сокращенная функция, которую нужно переустановить для всех проектов в решении? 1-я ошибка, которую я получил, отсутствовал каталог WindowsPowerShell, поэтому приведенное выше руководство не сработало из коробки. Во-вторых, я неправильно понял ваш ответ и попытался использовать Reinstall-Package для полной переустановки. Третье, что меня озадачило, это количество предупреждений ('... could not be found in your workspace, or you do not have permission to access it.'), которые создает этот вызов, возможно ли это сделать незаметно? Помимо этого? Потрясающие! : D - person Johny Skovdal; 14.03.2013
comment
Вам следует подумать о добавлении переключателя -Prerelease в метод Reinstall-Package на тот случай, если вам нужна предварительная версия. - person Haacked; 19.04.2013

https://docs.nuget.org/consume/package-manager-console-powershell-reference

При использовании клиента NuGet 2.8 или выше Install-Package можно использовать для понижения версии существующих пакетов в вашем проекте, если это необходимо. Например, если вы установили предварительную версию пакета, чтобы опробовать новые функции, но хотите вернуться к предыдущей стабильной версии, вы можете сделать это с помощью Install-Package (или Update-Package).

person Frol    schedule 10.03.2015
comment
I ‹3 ответа, которые решают проблему из будущего, должен быть обновленный ответ зеленая галочка - person felickz; 19.06.2015

У меня был Foo.Bar v1, который зависел от log4net v2, мне нужно было понизить зависимость log4net до 1.2.10, поэтому я сделал Foo.Bar v1.1 зависимым от log4net v1.2.10.

Я обнаружил, что если вы Update-Package Foo.Bar, он обновится до последней версии (не будут переустанавливать зависимости)

Но тогда вы можете Update-Package -Id Foo.Bar -Reinstall, и это должно переустановить все это с текущими зависимостями.

person Jeff Martin    schedule 19.03.2013