Nie można znaleźć miejsca docelowego środowiska wykonawczego dla platformy .NETCoreApp = v1 zgodnej z jednym z docelowych środowisk wykonawczych


149

Próbuję przeprowadzić migrację projektu Asp.Net Core RC1 do RC2 i postępuję zgodnie z tą dokumentacją, a także postępuję zgodnie z instrukcjami dotyczącymi migracji DNX do .NET CLI.

Podczas próby pojawia się następujący błąd dotnet run:

Nie można znaleźć miejsca docelowego dla środowiska wykonawczego „.NETCoreAPP, Version = v1.0” zgodnego z jednym z docelowych środowisk wykonawczych: „win10-x64, win81-x64, win8-x64, win7-x64”. Możliwe przyczyny:

  1. Projekt nie został przywrócony lub przywracanie nie powiodło się - uruchomiono przywracanie dotnet
  2. Projekt nie wymienia jednego z „win10-x64, win81-x64, win7-x64” w „runtimes”

Biegałem dotnet restorei wydaje się, że zakończyło się pomyślnie.

Zaktualizowałem wszystkie odpowiednie pakiety do RC2.

Odpowiedzi:


290

Powinienem był zrobić dokładnie to, co powiedział komunikat o błędzie. Podczas migracji z RC1 nie zdawałem sobie sprawy, że muszę określić runtimessekcję w moim project.jsonpliku.

W moim project.jsondodałem następującą sekcję:

"runtimes": {
    "win10-x64": { }
  }

I byłem gotowy.


Aktualizacja 27 lutego 2017 r

Nowe szablony projektów w programie Visual Studio 2017 RC nie wymagają już wcześniejszego określania czasów wykonywania (w project.jsonlub .csproj), jeśli zdecydujesz się wdrożyć aplikację jako Framework Dependent Deployment(FDD).

Jeśli jednak zdecydujesz się wdrożyć aplikację przy użyciu Self-contained Deployment(SCD), musisz z wyprzedzeniem określić w .csprojpliku wszystkie czasy wykonywania, w których aplikacja ma działać .

Poniżej znajduje się przykład .csprojpliku aplikacji korzystającej z metody wdrażania SCD:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <VersionPrefix>1.0.0</VersionPrefix>
    <DebugType>Portable</DebugType>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
  </ItemGroup>
</Project>

Aby uzyskać więcej informacji, zobacz to łącze , które zawiera dokładny opis obu typów opcji wdrażania, a także ich zalety i wady.


42
Utworzyłem nowy projekt w VS 2015 Update 3. I nadal brakowało mi tej sekcji.
— Edward Olamisan

7
Myślę, że nie zawsze jest konieczne dodawanie tego ustawienia. Dokumentacja mówi: „Jeśli jesteś przenośną biblioteką klas, która może działać w dowolnym środowisku wykonawczym, nie musisz określać środowiska wykonawczego”. - To prawda w przypadku większości moich projektów, ale ten błąd pojawił się, gdy dodałem projekt Entity Framework Core do mojego rozwiązania. Myślę, że EF Core - przynajmniej w stanie RC2 - ma ograniczenia na platformach, na których może działać, dlatego projekty, które się do niego odwołują, mogą wymagać zgodności z tymi ustawieniami. Ale tylko zgaduję. Na tym etapie dokumentacja jest naprawdę zagmatwana.
— Bernhard Koenig

7
Nie potrzebowałem tego nawet w nowym szablonie 1.0 Core VS2015, zaktualizowanym do 1.0.1 i otrzymałem powyższy błąd, dzięki za poprawkę!
— Steve McNiven-Scott,

1
@ SteveMcNiven-Scott - To samo tutaj. Musiałem także dodać kolejną linię w „runtimes”, aby przywrócić i zbudować na serwerze Ubuntu: „ubuntu.16.04-x64”. YMMV, ale błąd powinien wskazywać platformę, której brakuje i musiałbyś dodać.
— Car Bomba

5
W komunikacie o błędzie nie ma wzmianki o pliku „project.json”. Jak ludzie mają zgadywać?
— przydatne Pszczoła

76

Otrzymałem ten błąd po aktualizacji podstawowego szablonu VS2015 do wersji 1.0.1. To dlatego, że mam PCL, który jest przeznaczony, netstandard 1.4 jeśli nie chcesz określać każdego środowiska uruchomieniowego, po prostu zmień znaczniki zależności na Microsoft.NETCore.Appto:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}

1
Powyższe znaczniki naprawiły mój błąd kompilacji, ale IIS Express nie uruchomił się później. Zmiana „wersji”: „1.0.1” na „wersja”: „1.0.0” rozwiązała problem z usługami IIS.
— Ross

@ Ross zaktualizuj sekcję narzędzi w project.json, aby pasowała do wersji NETCore.App
— DalSoft

W tym przypadku "narzędzia": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
— DalSoft

1
@DalSoft - Tak, kilka tygodni temu zaktualizowałem VS 2015 najnowszymi łatami, w tym IISIntegration.Tools, i rozwiązałem problem Microsoft.NETCore.App: 1.0.1.
— Ross

1
@usefulBee Portable Class Library
— Mike_G

35

w project.json zmieniłem to (dodany typ):

//"Microsoft.NETCore.App": "1.1.0",
"Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" },

Teraz mogę znowu budować :-)

aktualizacja: teraz mogę ponownie zbudować, ale nie mogę "uruchomić" strony.

Musisz również upewnić się, że masz środowisko uruchomieniowe i sdk:

*) Narzędzia programu Visual Studio obejmują .NET Core 1.0.1. Aby dodać obsługę platformy .NET Core 1.1, należy również zainstalować środowisko uruchomieniowe .NET Core 1.1.

https://www.microsoft.com/net/download/core#/current


1
Wygląda na to, że nie możesz uruchomić witryny sieci Web, ponieważ musisz zainstalować .NET Core 1.1 SDK
— Victor Sharovatov,

i czasami konieczna jest ponowna instalacja Runtime.
— JuFo

To mi pomogło. Dzięki! Komentowanie „Microsoft.NETCore.App” bezpośrednio z zależności w project.json i zmienianie go na „frameworks”: {"netcoreapp1.1": {"dependencies": {"Microsoft.NETCore.App": {" wersja ":" 1.1.0 "," type ":" platforma "}}}},
— neodym

1
Dziękuję Ci. Te 2 proste kroki rozwiązały problem. Miejmy nadzieję, że w najbliższej przyszłości MS uczyni go bardziej przyjaznym dla programistów.
— EvZ

20

Otrzymałem ten błąd, ponieważ użyłem niesamowicie zepsutego Menedżera pakietów NuGet w programie Visual Studio 2015 do zaktualizowania moich zależności project.json. Okazało się, że:

"frameworks": {
  "netcoreapp1.0": {
    "dependencies": {
      "Microsoft.NETCore.App": {
        "type": "platform",
        "version": "1.0.1"
      } 
    }
  }
}

zaangażowany w to:

"dependencies": {
  "Microsoft.NETCore.App": "1.1.0"
},
"frameworks": {
  "netcoreapp1.0": {}
}

Do widzenia, definicja platformy!


15

Jeśli przeczytasz te dwa linki:

Najpierw https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli

i

po drugie, https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

Zobaczysz, że możesz zbudować całkowicie przenośną wersję, używając następującego fragmentu kodu w elemencie głównym zależności w project.json. Nie ma potrzeby określania środowiska wykonawczego, ponieważ jest to środowisko wykonawcze na poziomie CORE, które powinno być niezależne od platformy lub określane jako „zależne od struktury”

"Microsoft.NETCore.App": {
    "type": "platform",
    "version": "1.0.1"
}

lub możesz tworzyć dla wielu docelowych platform („samodzielnych aplikacji”), usuwając element type: platform w następujący sposób:

Dodaj to do elementu głównego zależności w project.json

"Microsoft.NETCore.App": {
    "version": "1.0.1"
}

i dodaj to jako nowy element poziomu głównego

"runtimes": {
    "win10-x64": {},  /* one or more RIDs */
    "osx.10.10-x64": {}
  },

Wiele celów wymaga podania nazw platform znanych jako „.NET Core Runtime IDentifiers (RID)”. Ich listę można znaleźć w drugim linku powyżej. Zawiera wiele smaków systemów Windows, Linux i OS X.

Aby uzyskać dobry przegląd różnych opcji wdrażania, możesz również przeczytać tę stronę:

https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/index

Z powyższego linku:

Możesz utworzyć dwa typy wdrożeń dla aplikacji .NET Core:

Wdrożenie zależne od struktury

Jak sama nazwa wskazuje, wdrażanie zależne od struktury (FDD) opiera się na udostępnionej wersji platformy .NET Core dla całego systemu, która ma być obecna w systemie docelowym. Ponieważ .NET Core jest już obecny, Twoja aplikacja jest również przenośna między instalacjami .NET Core. Twoja aplikacja zawiera tylko własny kod i wszelkie zależności innych firm, które są poza bibliotekami .NET Core. Dyski FDD zawierają pliki dll, które można uruchomić za pomocą narzędzia dotnet z wiersza polecenia. Na przykład dotnet app.dll uruchamia aplikację o nazwie app.

Samodzielne wdrażanie

W przeciwieństwie do FDD, samodzielne wdrażanie (SCD) nie polega na obecności żadnych współdzielonych komponentów w systemie docelowym. Wszystkie składniki, w tym zarówno biblioteki .NET Core, jak i środowisko uruchomieniowe .NET Core, są dołączone do aplikacji i są odizolowane od innych aplikacji .NET Core. Dyski SCD zawierają plik wykonywalny (taki jak app.exe na platformach Windows dla aplikacji o nazwie app), który jest zmienioną nazwą hosta .NET Core specyficznego dla platformy oraz plik .dll (na przykład app.dll), który jest faktyczna aplikacja.


9

W moim przypadku właśnie zaktualizowałem wszystkie pakiety nuget do ich najnowszych wersji, a nuget zmienił moje odwołanie do pakietu „Microsoft.NETCore.App” na następujące:

"Microsoft.NETCore.App": "1.1.0"

Zmieniłem go z powrotem na następującą formę i wszystko działało dobrze:

"Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    }

Żegnajcie 3 godziny mojego życia ....


4

jeśli wykonasz dotnet new i spojrzysz na wyjściowy plik json projektu, zobaczysz, że monikery uległy zmianie.

Wprowadź zmiany w pliku project.json w następujący sposób:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }

Dla mnie to najlepsze rozwiązanie. NET Core jest w ciągłym ruchu i wiele rzeczy się zmienia. Używanie interfejsu wiersza polecenia do generowania project.json w celu naprawienia zmian w pliku project.json, których NuGet PM nie może zachować spójności i aktualizacji.
— James B

0

Znalazłem jeden przydatny link z komentarza svicka pod następującą stroną: https://github.com/dotnet/cli/issues/2442


1
Chociaż Twoja odpowiedź jest w 100% poprawna, może również stać się w 100% bezużyteczna, jeśli ten link zostanie przeniesiony, zmieniony, scalony z innym lub strona główna po prostu zniknie ... :-( Dlatego edytuj swoją odpowiedź i skopiuj odpowiednią kroki od linku do odpowiedzi, gwarantując w ten sposób odpowiedź przez 100% czasu życia tej strony! ;-) Zawsze możesz zostawić link na dole swojej odpowiedzi jako źródło materiału ...
— Kaczor Donald

0

Zauważyłem, że w project.json potrzebujesz następujących elementów. Oto, co było wymagane, aby naprawić mój błąd:

Zależności

"dependencies": {
   "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
   },
}

Ramy

"frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

Runtime

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

Jeśli planujesz publikowanie w usługach IIS, możesz chcieć dodać środowiska wykonawcze. Zobacz coś w następujący sposób:

 "runtimes": {
    "win10-x64": {}
  },

Oto ogólna wskazówka, która dobrze mi się sprawdziła. Gdy moje rzeczy się psują, czasami tworzę domyślną aplikację ASP.NET Core albo witrynę internetową, albo pusty interfejs API sieci Web, aby sprawdzić zależności w project.json i innych miejscach. W ten sposób często można złapać wiele rzeczy. Powyższe odpowiedzi są na miejscu, ale pomyślałem, że napiszę to tutaj na wypadek, gdyby ktoś chciał oddzielić logikę bardziej w ogólnym formacie szablonu używanym przez ASP.NET Core.


0

W systemie Windows 7 z VS 2015 rozwiązanie po aktualizacji do netcore 1.1.2 zmieniało plik project.json w następujący sposób:

{
"version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": "1.1.2"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"    //This line must disappear
    }
  },

  "runtimes": {                 //
    "win7-x64": {}              //Add this lines
  }                             //
}

Po zmianie tego zależności zostaną zaktualizowane i viola.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.