Вопрос по nuget, visual-studio-2012, .net-4.5, .net – Решение по ретаргетингу от .Net 4.0 до 4.5 - как перенастроить пакеты NuGet?

193

Я перенес решение, которое в настоящее время нацелено на .NET 4.0 в VS2010, на VS2012, и теперь я бы хотел переназначить его на .Net 4.5

В чем я не уверен, так это в пакетах NuGet. Например, EF5, который я обновил с EF4 в VS2010, на самом деле оказывается EF 4.4, как вы можете видеть здесь:

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

Я также вижу следующее в пакетах.config для проекта:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

Итак, мой вопрос:

Какова лучшая практика для переориентации всех пакетов NuGet, которые в настоящее время настроены на целевой .NET 4.0, на целевой .NET 4.5?

Ваш Ответ

4   ответа
21

После неудачной попытки принять принятый ответ я хотел бы предложить менее рискованную команду:

Update-Package <PackageName> -ProjectName <ProjectName> -Reinstall -IgnoreDependencies

Для получения дополнительной информации: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html

Вы правы, я обновил ответ.
Согласно связанной документации-reinstall будет устанавливать только ту же версию, поэтому не вижу никакой выгоды от использования-safe, Я что-то пропустил?
250

NuGet 2.1 предлагает функцию, которая делает это намного проще: просто сделайтеupdate-package -reinstall -ignoreDependencies из консоли диспетчера пакетов.

NuGet 2.0 не очень хорошо справляется с переориентацией ваших приложений. Чтобы изменить ваши пакеты & apos; целевые рамки, вы должны удалить и переустановить пакеты (принимая к сведению установленные вами пакеты, чтобы вы могли переустановить каждый из них).

Причины, по которым пакеты должны быть удалены и переустановлены:

When installing a package, we determine the target framework of your project We then match that up with the package contents, finding the appropriate \lib\ folder (and \content\ folder) Assembly references are added with Hint Paths that point to the package's \lib\ folder, with the right subfolder (\lib\net40 for example) Content files are copied from the packages \content\ folder, with the right subfolder (\content\net40 for example) We record the targetFramework used to install the package within the packages.config file After you change your project's target framework, the Hint Paths still point to net40 When you uninstall packages, we check the targetFramework that was recorded in packages.config to see what target framework's libs/content to remove from your project When you reinstall the package, we detect your updated target framework and reference/copy the right libs/content
пакет обновления -reinstall не был решением для меня. Это такжеupdated много пакетов, вместо того, чтобы оставлять их на версиях, которые мы использовали и проверяли. Например, Ninject был перемещен до версии 3, и это является критическим изменением версии.
Опции -reinstall никогда не работали для меня. Он либо удаляется в неправильном порядке, и ошибки по «не могут удалить X, потому что Y зависит от него». или иногда просто не читает пакеты. В прошлый раз, когда я попробовал это, он удалил EntityFramework, а затем никогда не добавлял его снова.
Даже не пытайтесь обновить страницу обновления. Эта штука была настолько беспорядочной, когда она работала на моей локальной машине, и мне пришлось помешать дальнейшему продвижению менеджера пакетов NuGet. Он удалил мою версию jQuery 1.10 и почему-то заменил ее на 1.4.4. Просто сделайте это вручную и избавьте себя от хлопот.
Согласился на беспорядок, и через два года после этого поста. Он нашел более низкие версии некоторых нюансов и облажался много ссылок. И это было после почти двух часов обновления (на рабочей станции высокого уровня с начала 2014 года). 20 проектов в решении.
Используя VS 2012 с проектом ASP.NET MVC 4 и после перенацеливания .NET Framework с 4.0 на 4.5, я выполнилupdate-package -reinstall в консоли диспетчера пакетов. Все пакеты начали деинсталлироваться и обновляться, и внезапно Windows 8 перезагружалась, и когда она вернулась, она сказала «Ваш компьютер столкнулся с проблемой и перезагрузился. Хотите отправить информацию в Microsoft? & Quot; :( Пугает ... Кстати, это версия NuGet, которую я установил прямо сейчас:2.2.40116.9051 Открыл вопрос здесь:nuget.codeplex.com/workitem/3049
39

Для тех, у кого были проблемы сupdate-package -reinstall <packagename> команда, рассмотрите запуск с-ignoreDependencies флаг, вот так:

update-package -reinstall <packagename> -ignoreDependencies

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

Больше информацииВот.

На самом деле, похоже, что работает над проектом по умолчанию + любые проекты в зависимости от ...
@KalebPederson По моему опыту команда работает решение широкий?
Вы можете автоматизировать это для всего решения, слегка изменив его при работе в консоли диспетчера пакетов:get-package | % { update-package $_.Id -reinstall -ProjectName $_.ProjectName -ignoreDependencies }
Спасибо, это действительно экономит много хлопот. Наблюдение за тем, как Nuget пытается переустановить 10 или около того зависимостей, которые EnterpriseLibrary стремится создать, для более чем 30 проектов направлялось к работе на целый день. Это сводит это к минутам.
@ Bj & # xF6; rnAliG & # xF6; ransson - Извините, если я не достаточно ясно. Ответ предоставляет способ обновить один пакет в рамках решения. Мой сценарий будет проходить через каждый пакет NuGet в решении и перенаправлять его по всему решению. Ответ идеально подходит для одного проекта, но предоставленный мною сценарий может быть лучше, если у вас много пакетов, на которые нужно перенаправить.
4

При попытке переустановить пакетное решение в целом, я столкнулся с ошибкой зависимости (несмотря на использование-ignoreDependencies флаг), и всеpackages.config файлы для каждого проекта были удалены. В VS2013 кажется, чтоpackages.config не сбрасывается обратно на диск и не добавляется повторно, пока все обновленные зависимости / ссылки не будут повторно присоединены к проекту.

В моем случае, что работало, чтобы обновить каждый проект по одному, добавив-ProjectName projectname кupdate-package команда. В этом случаеpackages.config обновляется при обновлении каждого проекта.

Может быть непрактичным для очень больших решений, но кажется разумным компромиссом по-прежнему использовать преимущества автоматического обновления для максимально возможного числа проектов и изолировать проблемные, не имея всехpackages.config в вашем решении удалено при неудаче.

Я столкнулся с той же проблемой.UpdatePackage -Reinstall удалил файл package.config и ссылки на проекты для нескольких проектов (особенно тех, в которых были созданы поддельные сборки). Мы обошли это, отменив все изменения в испорченном проекте и запустив:Update-Package -reinstall -ProjectName "PROJECTNAME" -IgnoreDependencies

Похожие вопросы