Visual Studio 2017 не может обновить пакет Microsoft.NETCore.App («Заблокировано проектом»)

82

У меня есть приложение ядра dotnet, нацеленное на Microsoft.NETCore.App 1.1.2. Я создал тестовый проект для проверки этого проекта, но при сборке заметил это предупреждение: введите описание изображения здесь

Я открываю диспетчер пакетов NuGet и вижу, что предупреждение верное, тестируемый проект имеет другую версию Microsoft.NETCore.App: введите описание изображения здесь введите описание изображения здесь

Моя проблема в том, что Visual Studio не позволяет мне обновить эту версию, поэтому я не понимаю, как решить эту проблему: в введите описание изображения здесь идеале я бы просто щелкнул раскрывающийся список и выбрал правильную версию, но Visual Studio утверждает, что не может этого сделать из-за " дополнительные ограничения в проекте или packages.config ". Как мне обновить этот пакет? Какие «дополнительные ограничения» имеют в виду Visual Studio?

рикитанг
источник
Похоже, тестовый проект блокирует переход на более раннюю версию. Вы пытались щелкнуть правой кнопкой мыши по решению и выбрать управление пакетами nuget для решения и одновременно переместить все проекты в другую версию?
Кен Такер
Я не думал об этом, но я просто попробовал и получаю ту же ошибку «Заблокировано проектом». Также заблокирован переход другого проекта с 1.1.2. Я также установил последнее обновление для VS, но это не помогло.
riqitang
Я собрал всю информацию, которую нашел в этом вопросе / ответе: stackoverflow.com/questions/52518059/…, потому что эта проблема кажется действительно вопросом. Ответы здесь не являются полными для моего сценария
Джошит
Была такая же ошибка, когда я по ошибке нацелился на разные версии основной платформы .net в разных проектах в моем решении. Убедитесь, что свойства проекта для каждой целевой версии совпадают.
Обайлись

Ответы:

51

РЕДАКТИРОВАТЬ 2018 : Следуйте инструкциям по обновлению пакета, только если вы действительно знаете, что делаете. В большинстве случаев вам никогда не нужно обновлять этот пакет или другие пакеты, помеченные как «заблокированные проектом» - вручную. Приложение, зависящее от платформы, будет использовать последнюю доступную среду выполнения, а автономное приложение автоматически выполнит дополнительную сборку с использованием более новой версии этого пакета. (есть некоторые крайние случаи, когда вам нужно обновить этот пакет в тестовых проектах. В этом случае добавьте <TargetLatestRuntimePatch>true</…>и посмотрите эти вопросы и ответы для других вариантов)

Неявный пакет ссылается на то, что Microsoft.NET.Sdk делает вывод, не могут быть обновлены через NuGet.

Если вы перешли с project.json, 1.1.0вероятно , проект со ссылкой содержит

<RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>

в файле csproj или в подобном элементе (если вы могли использовать диспетчер пакетов ранее для установки версии):

<PackageReference Update="Microsoft.NETCore.App" Version="1.1.0" />

Удалите записи, подобные приведенным выше, и все пакеты будут ссылаться 1.1.2(или на то, что установленный SDK считает последним) автоматически. Настоятельно рекомендуется установить RuntimeFrameworkVersionво всех проектах.

Мартин Ульрих
источник
2
Вы были правы: я открыл файл .csproj и удалил <RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>строку. VS по-прежнему не позволяет мне вручную изменить версию, но, по крайней мере, сейчас это правильная версия (она обновлена ​​до 1.1.2, как вы и сказали)
riqitang
48

У меня была аналогичная проблема при попытке установить пакет Entityframework.Core в веб-приложение .NET Core 2. Чтобы решить эту проблему, я принудительно установил через консоль диспетчера пакетов:

Install-Package Microsoft.NETCore.App -Version 2.0.5

(2.0.5 была самой последней версией на то время)

Надеюсь, это будет полезно. Мир.

Марлон Диас
источник
7
Это сработало для меня при обновлении до 2.1.1 -> Отличный ответ, отсутствующий во всех статьях, которые я смог найти.
Пол
Это, наконец, сработало и для меня. Вызвав это в PMC VS2017 для каждого проекта, который я обновил до версии 2.1.3 с версии 2.1.0
Пол Мимс,
1
Установочный
5
Но почему он вообще «заблокирован проектом»? Это какая-то ошибка или есть веская причина? Если есть веская причина, возможно, делать это - плохая идея? Или это решает указанную проблему?
niico
Спасибо за подсказку. Таким образом, «Заблокировано проектом» оказалось как «Заблокировано VS NuGet GUI».
Grimm
19

Для меня добавление

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>

сделал трюк

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
gsharp
источник
Таким образом, это будет нацелено на последнюю версию фреймворка на текущей машине. Если локальный компьютер исправлен, а хост-сервер - нет, тогда не возникнут ли проблемы?
jonmeyer
На самом деле я не знаю, потому что мы выполняем автономные развертывания. Но как дикая догадка, я могу предположить, что, поскольку там написано «последняя» и нет конкретной версии, она просто не будет использовать ее, если она отсутствует. @jonmeyer
gsharp
В моем решении были установлены разные версии. Я отредактировал их все, чтобы добавить эту строку. Довел их до той же версии, а потом снова удалил строчку. Но я все еще получаю сообщение, заблокированное проектом, когда я управляю пакетами nuget для решения.
sam
@sam вы пробовали и другие решения? похоже, что два ответа с 30+ голосами также подходят для некоторых людей.
gsharp
Да уж. Я сделал. Я пытаюсь использовать опцию управления пакетами nuget для решения в пользовательском интерфейсе и устанавливать / удалять с помощью щелчков мыши. Отсутствие необходимости редактировать файлы csproj вручную. И я не смог сделать это с помощью пользовательского интерфейса. Ваш способ и другие варианты работают, но пользовательский интерфейс не работает.
Sam
7

Краткий ответ

Добавьте явную версию в Microsoft.AspNetCore.Appссылку на пакет в файле .csproj.

Длинный ответ

У меня был совершенно новый проект netcoreapp2.1. Следующее было в файле .csproj. Обратите внимание, что со Microsoft.AspNetCore.Appссылкой на пакет не было связано ни одной версии .

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" />
  ...
</ItemGroup>

Я добавил явную ссылку на Microsoft.Extensions.Logging.Abstractionsпакет, чтобы устранить несоответствие зависимостей (ошибка сборки). Micorsoft.AspNetCore.Appтребуется версия 2.1.0 этой зависимости, но другому пакету нужна версия 2.1.1. Мой файл .csproj теперь выглядел так.

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" />
  <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
  ...
</ItemGroup>

Это уменьшило ошибку сборки до предупреждения о том, что Micorsoft.AspNetCore.Appтребуется версия Microsoft.Extensions.Logging.Abstractionsпакета 2.1.0, но версия 2.1.1, конечно же, была решена.

Попытка обновить Micorsoft.AspNetCore.Appдо версии 2.1.1, чтобы исправить предупреждение, была заблокирована диспетчером пакетов, как упоминалось OP.

Я обновил Micorsoft.AspNetCore.Appссылку на свой пакет, чтобы явно использовать версию 2.1.1, как это.

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.1.1" />
  ...
</ItemGroup>

Это устранило предупреждение сборки и разблокировало все версии Microsoft.AspNetCore.Appв диспетчере пакетов. Я даже смог удалить явную ссылку на, Microsoft.Extensions.Logging.Abstractionsне возвращая исходную ошибку. Окончательный .csproj выглядел так, без проблем.

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  ...
</ItemGroup>
прослушивание87
источник
3

У меня была такая же проблема, и я думаю, проблема в упаковке.

<PackageReference Include="Microsoft.AspNetCore.App" />

Проблема была решена после того, как я точно указал версию.

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" />

Насколько я знаю, эта ошибка возникает, когда номер версии

Ддагсан
источник
2

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

До:

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

После:

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
Shooresh
источник
0

Я решил это просто: щелкнув правой кнопкой мыши на Project (или ALT + Enter) -> Properties -> Application -> Target Framework (выберите .NET Core framework (в данном случае 1.1))

Harlandgomez
источник
0

Лучшая рекомендация - заново создать свои проекты после обновления SDK и среды выполнения, а затем оставить старый код и конфигурацию внутри новых проектов. В остальном вы будете тратить слишком много времени на бесполезные настройки и неизвестные конфигурации.

Шади Намрути
источник