Twój projekt nie odwołuje się do frameworka „.NETFramework, Version = v4.5”.

91

Używam VS 2015.

Twój projekt nie odwołuje się do struktury „.NETFramework, Version = 4.5”. Dodaj odwołanie do „.NETFramework, Version = 4.5” w sekcji „frameworks” pliku project.json, a następnie ponownie uruchom przywracanie NuGet.

Ten błąd pojawia się w moich warstwach dostępu do danych i logiki biznesowej wkrótce po dodaniu do mojej warstwy MVC. Do tego czasu wszystko układało się dobrze, ale nie wiem, co spowodowało ten błąd. Oto mój project.json:

{
  "version": "1.0.0-*",
  "description": "foo bar Class Library",
  "authors": [ "foo bar" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "frameworks": {
    "net451": { },
    "dotnet5.4": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

Oto, czego próbowałem:

  1. Zastąpienie „dotnet5.4” tekstem „net451” (i usunięcie go), jak stwierdzono w tej odpowiedzi .

Wynik to ten sam błąd.

  1. Zastąpienie „dotnet5.4” „net45” i pozostawienie „net451”. Powoduje to nowy błąd:

Twój project.json nie ma sekcji środowiska wykonawczego. Należy dodać „runtimes”: {„win”: {}} ”do pliku project.json, a następnie ponownie uruchomić przywracanie NuGet.

Próbowałem zrobić tak, jak sugerował ten błąd i dodać

"runtimes": {
    "win":  {}
  },

To spowodowało ten błąd, którego nie mogę pominąć:

Twój project.json nie wymienia „win” jako docelowego środowiska wykonawczego. Należy dodać „„ win ”: {}” w sekcji „runtimes” w pliku project.json, a następnie ponownie uruchomić przywracanie NuGet.

Dodałem już „wygrana”, a to zaczyna przypominać czerwony śledź. Co robię, zmieniając plik project.json bezpośrednio, czy NuGet nie obsługuje tego?

S. Loveland ECY
źródło
W pierwszej części przejdź do ustawień projektu i ustaw Target Framework na 4.5
Hirbod Behnam
Już tak jest.
S. Loveland ECY
1
@ S.LovelandECY Czy udało Ci się rozwiązać ten problem? Mam ten sam problem, niezależnie od tego, czy używam 4.5.1, 4.5.2 czy 4.6 - wszystkie moje projekty zdecydowanie używają tej samej wersji frameworka.
Thierry
@ S.LovelandECY możesz rozważyć zmianę zaakceptowanej odpowiedzi, biorąc pod uwagę rozbieżność między głosami między nią a odpowiedzią z najwyższą liczbą głosów
RJFalconer

Odpowiedzi:

10

Właściwie właśnie odkryłem problem. Skończyło się na kliknięciu na Restore Nuget Packagespoziomie rozwiązania i udało mi się skompilować mój PCLplik, a następnie resztę mojego rozwiązania.

Mam nadzieję że to pomoże.

Thierry
źródło
1
ta odpowiedź była dla mnie istotna.
kovac
188

Miałem ten sam problem i ostatecznie musiałem usunąć nie tylko zawartość bini objfoldery, ale także .vskatalog rozwiązania.

Chris R. Donnelly
źródło
1
.vs był przyczyną problemu
Lukas
7
to było rozwiązanie dla mnie!
Riki
9
.vs nie było dla mnie potrzebne. Dzięki!
geynske006
2
Nie mam pojęcia, jak ci właściwie podziękować. Przez większą część godziny drapałem się w głowę, próbując to rozgryźć. usunąłem wszystkie 3 i działałem jak urok. +1
tfrascaroli
2
Podejrzewam, że ten problem jest spowodowany przełączeniem oddziałów GitHub na moim lokalnym polu deweloperskim. Oznacza to, że pracuję w jednej gałęzi i kompilacja tworzy wiele plików, które nie są częścią repozytorium. Następnie pobieram inną gałąź i te pliki niezwiązane z repozytorium są nadal na swoim miejscu. W jakiś sposób powodują konflikty z nowo pobranymi plikami.
Phoeniceus Agelaius
127

Miałem ten sam problem - dzieje się to nadal przy użyciu programu Visual Studio 2017.3, który używa plików .csproj zamiast project.json. Co ciekawe, komunikat o błędzie nadal zawiera tekst „project.json”.

Wygląda na to, że przyczyną tego problemu jest plik lub obj\project.assets.jsonplik blokady (w zależności od wersji programu VS) z poprzedniej kompilacji, który nie jest usuwany podczas czyszczenia, jak opisano tutaj .

Ręczne usunięcie /objkatalogu jest szybkim obejściem.

Jeśli masz „nowy” projekt (np. .NET Core lub projekt netstandard utworzony w VS 2017) i „stary” projekt w tym samym katalogu (np. Projekt .NET 4.6 utworzony w VS 2015), wygląda na to, że będą walczyć nieustannie, ponieważ oboje używają ./objreż. na różne sposoby. Więcej informacji tutaj. .

Obejściem msbuild jest użycie innego katalogu w jednym z projektów obj. Dodałem to do mojego „starego” csproj:

<PropertyGroup>
  <!-- Needed due to old project and new project in same directory: https://github.com/NuGet/Home/issues/5126 -->
  <BaseIntermediateOutputPath>obj_netfx\</BaseIntermediateOutputPath>
</PropertyGroup>
crimbo
źródło
4
To obejście działa dobrze w VS 2017, oszczędziłeś mi czasu.
MechanicalCoder
2
Znakomity. Świetne wyjaśnienie.
Mick Byrne,
1
Pozwól, że dodam podziękowania. Usunięcie wszystkich obraźliwych folderów „obj” również rozwiązało mój problem.
Stuart
2
Niech cię Bóg błogosławi! Zastanawiałem się, gdzie jest ten cholerny plik project.json. Usuwanie / obj to zrobił
Vishnoo Rath,
1
Nadal problem, nawet w VS 2019. Dzięki za rozwiązanie!
user2363676
27

Okazało się, że przyczyną tego problemu był nieuczciwy plik project.lock.json. Po usunięciu pliku problem zniknął.

Oto dokumentacja dotycząca project.lock.json.

Kolejną radą byłoby upewnienie się, że plik project.lock.json jest ignorowany w pliku ignorowania git i wypróbowanie pełnego git clean. Upewnij się, że rozumiesz konsekwencje czyszczenia Git, zanim to zrobisz.

Christian Findlay
źródło
2

Miałem ten sam problem po aktualizacji do Visual Studio dla komputerów Mac 7.4 (kompilacja 1033):

Error: Your project is not referencing the "MonoAndroid,Version=v7.1" framework. Add a reference to "MonoAndroid,Version=v7.1" in the "frameworks" section of your project.json, and then re-run NuGet restore.

Nie mam żadnych plików projektu JSON. Wskazówki tutaj również nie pomogły, więc musiałem się przekonać, że oprócz mojego docelowego SDK (Nougat 7.1) musiałem zainstalować najnowszy Android SDK (Oreo 8.1).

wprowadź opis obrazu tutaj

Waescher
źródło
0

Mam ten sam problem, ale rozwiązałem go, dodając odpowiedni zasób pakietu użytkowego pod vs2017-->tools-->options-->Nugetpacakge manager--->updatedodpowiednim adresem URL pakietu.

Zobacz poniższy obrazek

wprowadź opis obrazu tutaj

ch sandeep kumar
źródło