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


82

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

Я відкриваю NuGet Package Manager і бачу, що попередження правильне, проект, що тестується, має іншу версію Microsoft.NETCore.App: введіть тут опис зображення введіть тут опис зображення

Моя проблема полягає в тому, що Visual Studio не дозволяє мені оновлювати цю версію, тому я збентежений, як вирішити цю проблему: введіть тут опис зображення В ідеалі я просто натиснув би спадне меню та вибрав потрібну версію, але Visual Studio стверджує, що не може зробити це через " додаткові обмеження в проекті або. Як я повинен оновити цей пакет? На які "додаткові обмеження" посилається Visual Studio?


Схоже, тестовий проект блокує зниження версії. Ви намагалися клацнути правою кнопкою миші на рішенні та вибрати керувати nuget-пакетами для рішення та одночасно перемістити всі проекти до іншої версії?
Кен Такер,

Я не думав про це, але я просто спробував, і я отримую ту саму помилку "Заблоковано проектом". Також інший проект заблокований від віддалення від 1.1.2. Я також встановив останнє оновлення для VS, але це не допомогло.
riqitang


Я зібрав всю інформацію, яку знайшов у цьому питанні / відповіді: stackoverflow.com/questions/52518059/..., оскільки ця проблема, здається, справді є питанням. Відповіді тут не повні для мого сценарію
Джошіт

У мене однакова помилка, коли я помилково націлював різні версії основної основи .net на різні проекти у своєму рішенні. Переконайтесь, що властивості проекту для кожної цілі однакові.
obaylis

Відповіді:


51

EDIT 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. Щоб вирішити проблему, я змусив установку за допомогою консолі Package Manager:

Install-Package Microsoft.NETCore.App -Version 2.0.5

(На той час 2.0.5 була останньою версією)

Сподіваюся, це корисно. Мир.


7
Це спрацювало для мене з оновленням до 2.1.1 -> Чудова відповідь і відсутність у всіх статтях, які я міг знайти.
Пол

Це нарешті спрацювало і у мене. Після виклику цього в pmc VS2017 для кожного проекту я перейшов на v2.1.3 з v2.1.0
Пол Меемс

1
Install-Package Microsoft.NETCore.App
Доратото

5
Чому це взагалі `` заблоковано проектом ''? Це якась помилка чи є поважна причина? якщо є поважна причина, можливо, робити вищезазначене не є гарною ідеєю? Або це вирішує згадану проблему?
niico

Дякую за цей підказку. Тож "Заблоковано проектом" вийшло як "Заблоковано графічним інтерфейсом VS NuGet".
Grimm

19

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

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>

зробив фокус

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>

Отже, це буде націлено на останню версію фреймворку на поточній машині. Якщо локальний комп’ютер виправлений, а хост-сервер - то чи не виникатимуть проблеми?
jonmeyer

Я насправді не знаю, тому що ми робимо самостійні розгортання. Але як дику здогадку я міг би собі уявити, оскільки там написано "останнє", і немає конкретної версії, яка б просто не використовувала жодної, якщо вона не присутня. @jonmeyer
gsharp

У моєму рішенні були встановлені різні версії. Я відредагував їх усіх, щоб додати цей рядок. Привів їх до тієї ж версії, а потім знову видалив рядок. Але я все ще отримую повідомлення, заблоковане проектом, коли я керую nuget-пакетами для рішення.
сам

@sam ви також пробували інші рішення? здається, що дві відповіді з 30+ голосами також працюють для деяких людей.
gsharp

Так. Я зробила. Що я намагаюся зробити, це скористатися опцією управління nuget-пакетами для рішення в інтерфейсі та встановити / видалити за допомогою клацання миші. Не потрібно редагувати файли csproj вручну. І я не зміг цього зробити за допомогою інтерфейсу користувача. Ваш шлях та інші варіанти працюють, але інтерфейс не працює.
сам

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>

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>

0

Я вирішив це просто: Клацніть правою кнопкою миші на Проект (або ALT + Enter) -> Властивості -> Застосування -> Цільова структура (Виберіть фреймворк .NET Core (в даному випадку 1.1))


0

Найкраща рекомендація - відтворити свої проекти знову після оновлення SDK та часу роботи, а потім залишити свій старий код та конфігурацію всередині нових проектів. Крім цього, ви будете витрачати занадто багато часу на марні налаштування та невідомі конфігурації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.