Program Visual Studio 2017 nie może zaktualizować pakietu Microsoft.NETCore.App („Zablokowany przez projekt”)

82

Mam aplikację dotnet core, która jest przeznaczona dla Microsoft.NETCore.App 1.1.2. Utworzyłem projekt testowy, aby przetestować go w tym projekcie, ale podczas budowania zauważyłem to ostrzeżenie: wprowadź opis obrazu tutaj

Otwieram Menedżera pakietów NuGet i widzę, że ostrzeżenie jest poprawne, testowany projekt ma inną wersję Microsoft.NETCore.App: wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

Mój problem polega na tym, że program Visual Studio nie pozwala mi zaktualizować tej wersji, więc nie wiem, jak rozwiązać ten problem: wprowadź opis obrazu tutaj najlepiej byłoby po prostu kliknąć menu i wybrać odpowiednią wersję, ale program Visual Studio twierdzi, że nie może tego zrobić z powodu „ dodatkowe ograniczenia w projekcie lub packages.config ”. Jak mam zaktualizować ten pakiet? Do jakich „dodatkowych ograniczeń” odnosi się program Visual Studio?

riqitang
źródło
Wygląda na to, że projekt testowy blokuje obniżenie wersji. Czy próbowałeś kliknąć prawym przyciskiem myszy rozwiązanie i wybrać zarządzanie pakietami NuGet dla rozwiązania i przenieść wszystkie projekty do innej wersji w tym samym czasie?
Ken Tucker
Nie pomyślałem o tym, ale po prostu spróbowałem i otrzymuję ten sam błąd „Zablokowany przez projekt”. Również drugi projekt nie może odejść od 1.1.2. Zainstalowałem również najnowszą aktualizację dla VS, ale to nie pomogło.
riqitang
Zebrałem wszystkie informacje, które znalazłem w tym pytaniu / odpowiedzi: stackoverflow.com/questions/52518059/, ponieważ ten problem wydaje się być naprawdę pytaniem. Odpowiedzi tutaj nie są kompletne dla mojego scenariusza
Joshit
Wystąpił ten sam błąd, gdy omyłkowo wskazywałem na różne wersje platformy .net core w różnych projektach w moim rozwiązaniu. Upewnij się, że właściwości projektu dla każdej z nich są przeznaczone dla tej samej wersji.
obaylis

Odpowiedzi:

51

EDYCJA 2018 : Postępuj zgodnie z instrukcjami aktualizacji pakietu tylko wtedy, gdy naprawdę wiesz, co robisz. W większości przypadków nie ma potrzeby ręcznej aktualizacji tego pakietu - ani innych pakietów oznaczonych jako „zablokowane przez projekt”. Aplikacja zależna od struktury będzie używać najnowszego dostępnego środowiska uruchomieniowego, a samodzielna aplikacja automatycznie wykona dodatkową kompilację przy użyciu nowszej wersji tego pakietu. (są pewne skrajne przypadki, w których musisz zaktualizować ten pakiet w projektach testowych. w takim przypadku dodaj <TargetLatestRuntimePatch>true</…>i zobacz te pytania i odpowiedzi, aby uzyskać inne opcje)

Microsoft.NET.SdkNiejawny pakiet odwołuje się do tego, że nie można zaktualizować za pośrednictwem NuGet.

W przypadku migracji z project.json projekt z 1.1.0odwołaniem prawdopodobnie zawiera plik

<RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>

w pliku csproj lub podobnym elemencie (jeśli wcześniej korzystałeś z menedżera pakietów do ustawienia wersji):

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

Usuń wpisy, takie jak powyższe, a wszystkie pakiety będą się odnosić 1.1.2(lub cokolwiek, co zainstalowany SDK uważa za najnowszy) automatycznie. Alternatywnie ustawiane RuntimeFrameworkVersionwe wszystkich projektach.

Martin Ullrich
źródło
2
Miałeś rację: otworzyłem plik .csproj i usunąłem tę <RuntimeFrameworkVersion>1.1.0</RuntimeFrameworkVersion>linię. VS nadal nie pozwala mi ręcznie zmienić wersji, ale przynajmniej jest to właściwa wersja teraz (zaktualizowana do 1.1.2, tak jak powiedziałeś)
riqitang
48

Miałem podobny problem podczas próby zainstalowania pakietu Entityframework.Core w aplikacji internetowej .NET Core 2. Aby rozwiązać ten problem, wymusiłem instalację za pomocą konsoli Menedżera pakietów:

Install-Package Microsoft.NETCore.App -Version 2.0.5

(2.0.5 była wówczas najnowszą wersją)

Mam nadzieję, że to przydatne. Pokój.

Marlon Dias
źródło
7
Pomogło mi to podczas aktualizacji do wersji 2.1.1 -> Świetna odpowiedź i brakowało wszystkich artykułów, które udało mi się znaleźć.
Paul
To w końcu zadziałało również dla mnie. Po wywołaniu tego na pmc VS2017 dla każdego projektu zaktualizowałem do wersji 2.1.3 z wersji 2.1.0
Paul Meems
1
Zainstaluj pakiet Microsoft.NETCore.App
Dorathoto
5
Dlaczego jednak w ogóle jest „blokowany przez projekt”? Czy to jakiś błąd, czy jest dobry powód? jeśli istnieje dobry powód, być może wykonanie powyższego nie jest dobrym pomysłem? A może rozwiązuje ten problem?
niico
Dzięki za tę wskazówkę. Tak więc „Zablokowane przez projekt” okazało się „Zablokowane przez interfejs GUI VS NuGet”.
Grimm
19

Dla mnie dodanie

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>

załatwił sprawę

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
gsharp
źródło
Więc to będzie dotyczyło najnowszej wersji frameworka na bieżącej maszynie. Jeśli komputer lokalny jest załatany, a serwer hosta, czy nie spowoduje to problemów?
jonmeyer
Właściwie nie wiem, ponieważ robimy samodzielne wdrożenia. Ale jako szalone przypuszczenie, mógłbym sobie wyobrazić, ponieważ jest napisane „najnowsza” i nie ma konkretnej wersji, której po prostu by nie używała, jeśli nie byłaby obecna. @jonmeyer
gsharp
W swoim rozwiązaniu zainstalowałem różne wersje. Edytowałem je wszystkie, aby dodać tę linię. Przeniesiono je do tej samej wersji, a następnie ponownie usunąłem linię. Ale nadal otrzymuję komunikat blokowany przez projekt, gdy zarządzam pakietami NuGet w celu rozwiązania.
sam
@sam, czy wypróbowałeś też inne rozwiązania? wydaje się, że dwie odpowiedzi z ponad 30 głosami działają również dla niektórych osób.
gsharp
Tak. Zrobiłem. Próbuję użyć opcji zarządzania pakietami nuget dla rozwiązania w interfejsie użytkownika i zainstalować / odinstalować za pomocą kliknięć myszą. Brak konieczności ręcznego edytowania plików csproj. I nie mogłem tego zrobić za pomocą interfejsu użytkownika. Twój sposób i inne opcje działają, ale interfejs użytkownika nie działa.
sam
7

Krótka odpowiedź

Dodaj jawną wersję do Microsoft.AspNetCore.Appodwołania do pakietu w pliku .csproj.

Długa odpowiedź

Miałem zupełnie nowy projekt netcoreapp2.1. W pliku .csproj znajdowały się następujące informacje. Uwaga: z Microsoft.AspNetCore.Appodwołaniem do pakietu nie jest powiązana żadna wersja .

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

Dodałem jawne odniesienie do Microsoft.Extensions.Logging.Abstractionspakietu, aby rozwiązać niezgodność zależności (błąd kompilacji). Micorsoft.AspNetCore.Appchciał mieć wersję 2.1.0 tej zależności, ale inny pakiet chciał mieć wersję 2.1.1. Mój plik .csproj wyglądał teraz tak.

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

Zmniejszyło to błąd kompilacji do ostrzeżenia o Micorsoft.AspNetCore.Appwymaganiu wersji 2.1.0 Microsoft.Extensions.Logging.Abstractionspakietu, ale wersja 2.1.1 została oczywiście rozwiązana.

Próba aktualizacji Micorsoft.AspNetCore.Appdo wersji 2.1.1 w celu naprawienia ostrzeżenia została zablokowana przez Menedżera pakietów, jak wspomniano w OP.

Zaktualizowałem Micorsoft.AspNetCore.Appodniesienie do pakietu, aby jawnie używać wersji 2.1.1 w ten sposób.

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

Naprawiło to ostrzeżenie o kompilacji i odblokowało wszystkie wersje Microsoft.AspNetCore.Appw Menedżerze pakietów. Udało mi się nawet usunąć wyraźne odniesienie do Microsoft.Extensions.Logging.Abstractionsbez ponownego wprowadzania pierwotnego błędu. Ostateczny plik .csproj wyglądał tak bez żadnych problemów.

<ItemGroup>
  ...
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
  ...
</ItemGroup>
bugged87
źródło
3

Miałem ten sam problem i myślę, że problem dotyczy opakowania.

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

Problem został rozwiązany po dokładnym wskazaniu wersji.

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

Jak wiem, ten błąd wystąpił przy numerze wersji

ddagsan
źródło
2

Inne możliwe rozwiązanie. W csprojpliku zaktualizuj platformę docelową do wersji, do której chcesz przeprowadzić uaktualnienie. Po wprowadzeniu zmiany, zgodnie z poniższymi fragmentami, pakiety można uaktualnić za pośrednictwem menedżera pakietów NuGet rozwiązania.

Przed:

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

Po:

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
Shooresh
źródło
0

Rozwiązałem to po prostu: Klikając prawym przyciskiem myszy Projekt (lub ALT + Enter) -> Właściwości -> Aplikacja -> Platforma docelowa (Wybierz platformę .NET Core (w tym przypadku 1.1))

harlandgomez
źródło
0

Najlepszym zaleceniem jest ponowne utworzenie projektów po uaktualnieniu zestawu SDK i czasu wykonywania, a następnie upuszczenie starego kodu i konfiguracji w nowych projektach. Poza tym będziesz spędzać zbyt dużo czasu na bezużytecznych poprawkach i nieznanych konfiguracjach.

Shadi Namrouti
źródło