Laufzeitziel für Framework .NETCoreApp = v1 kann nicht gefunden werden, das mit einer der Ziellaufzeiten kompatibel ist

149

Ich versuche, ein Asp.Net Core RC1-Projekt auf RC2 zu migrieren. Ich habe diese Dokumentation befolgt und auch die Anweisungen für die DNX-Migration auf .NET CLI befolgt.

Beim Versuch wird folgende Fehlermeldung angezeigt dotnet run:

Das Laufzeitziel für das Framework '.NETCoreAPP, Version = v1.0' kann nicht gefunden werden und ist mit einer der Ziellaufzeiten kompatibel: 'win10-x64, win81-x64, win8-x64, win7-x64'. Mögliche Ursachen:

  1. Das Projekt wurde nicht wiederhergestellt oder die Wiederherstellung ist fehlgeschlagen. Führen Sie 'dotnet restore' aus.
  2. Das Projekt listet in den 'Laufzeiten' keine der Optionen 'win10-x64, win81-x64, win7-x64' auf.

Ich bin gelaufen dotnet restoreund es scheint erfolgreich abgeschlossen zu sein.

Ich habe alle relevanten Pakete auf RC2 aktualisiert.

Blake Mumford
quelle

Antworten:

290

Ich hätte genau das tun sollen, was in der Fehlermeldung stand. Bei der Migration von RC1 wurde mir nicht klar, dass ich einen runtimesAbschnitt in meiner project.jsonDatei angeben musste .

In meinem habe project.jsonich folgenden Abschnitt hinzugefügt:

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

Und ich war gut zu gehen.


Update 27. Februar 2017

Für neue Projektvorlagen in Visual Studio 2017 RC müssen keine Laufzeiten mehr (im project.jsonoder .csproj) im Voraus angegeben werden, wenn Sie Ihre App als Framework Dependent Deployment(FDD) bereitstellen möchten.

Wenn Sie Ihre App jedoch mithilfe von Self-contained Deployment(SCD) bereitstellen möchten, müssen Sie alle Laufzeiten, auf denen Ihre App ausgeführt werden soll, im Voraus in Ihrer .csprojDatei angeben .

Unten finden Sie ein Beispiel für eine .csprojDatei für eine App, die die SCD-Bereitstellungsmethode verwendet:

<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>

Weitere Informationen finden Sie unter diesem Link. Dort finden Sie eine ausführliche Beschreibung beider Arten von Bereitstellungsoptionen sowie ihrer Vor- und Nachteile.

Blake Mumford
quelle
42
Ich habe in VS 2015 Update 3 ein neues Projekt erstellt. Dieser Abschnitt fehlte immer noch.
Edward Olamisan
7
Ich denke, es ist nicht immer notwendig, diese Einstellung hinzuzufügen. In der Dokumentation heißt es: "Wenn Sie eine tragbare Klassenbibliothek sind, die zu jeder Laufzeit ausgeführt werden kann, müssen Sie keine Laufzeit angeben." - Das gilt für die meisten meiner Projekte, aber dieser Fehler trat auf, als ich meiner Lösung ein Entity Framework Core-Projekt hinzufügte. Ich denke, EF Core hat - zumindest in seinem RC2-Status - eine Einschränkung, auf welchen Plattformen es ausgeführt werden kann. Daher müssen Projekte, die darauf verweisen, möglicherweise diesen Einstellungen entsprechen. Aber ich rate nur. Die Dokumentation ist an dieser Stelle wirklich verwirrend.
Bernhard Koenig
7
Ich brauchte dies nicht einmal für eine neue 1.0 Core VS2015-Vorlage, die auf 1.0.1 aktualisiert wurde und den obigen Fehler erhielt, danke für das Update!
Steve McNiven-Scott
1
@ SteveMcNiven-Scott - Gleiches hier. Ich musste auch eine weitere Zeile in "runtimes" hinzufügen, damit es wiederhergestellt und auf Ubuntu Server aufgebaut werden kann: "ubuntu.16.04-x64". YMMV, aber der Fehler sollte auf die Plattform hinweisen, die Sie vermissen, und müsste hinzugefügt werden.
Zar Bomba
5
In der Fehlermeldung wird "project.json" nicht erwähnt. Wie sollen die Leute raten?
nützlichBee
76

Ich habe diesen Fehler erhalten, nachdem ich die VS2015-Kernvorlage auf 1.0.1 aktualisiert habe. Das lag daran, dass ich eine PCL habe, die darauf abzielt, netstandard 1.4 wenn Sie nicht jede Laufzeit angeben müssen. Ändern Sie einfach das Abhängigkeits-Markup für Folgendes Microsoft.NETCore.App:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Mike_G
quelle
1
Das obige Markup hat meinen Kompilierungsfehler behoben, aber IIS Express wurde danach nicht gestartet. Durch Ändern von "version": "1.0.1" in "version": "1.0.0" wurde das IIS-Problem behoben.
Ross
@ Ross aktualisieren Sie den Werkzeugabschnitt in project.json, um mit der Version NETCore.App
DalSoft
In diesem Fall "tools": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-Preview2-Final"},
DalSoft
1
@DalSoft - Ja, ich habe mein VS 2015 vor einigen Wochen mit den neuesten Patches einschließlich IISIntegration.Tools aktualisiert und das Problem mit Microsoft.NETCore.App: 1.0.1 für mich behoben.
Ross
1
@usefulBee Portable Class Library
Mike_G
35

In project.json habe ich Folgendes geändert (Typ hinzugefügt):

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

Jetzt kann ich wieder bauen :-)

Update: Jetzt kann ich die Website wieder erstellen, aber nicht "ausführen".

Sie müssen sicherstellen, dass Sie die Laufzeit und SDK auch haben:

*) Zu den Visual Studio-Tools gehört .NET Core 1.0.1. Um .NET Core 1.1-Unterstützung hinzuzufügen, müssen Sie auch die .NET Core 1.1-Laufzeit installieren.

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

juFo
quelle
1
Sieht so aus, als könnten Sie die Website nicht ausführen, da Sie das .NET Core 1.1 SDK
Victor Sharovatov
und manchmal ist auch eine Neuinstallation der Runtime erforderlich, wie ich herausgefunden habe.
JuFo
Das hat mir geholfen. Vielen Dank! Kommentieren Sie "Microsoft.NETCore.App" direkt aus den Abhängigkeiten in der Datei project.json aus und ändern Sie sie in "Frameworks": {"netcoreapp1.1": {"Abhängigkeiten": {"Microsoft.NETCore.App": {" version ":" 1.1.0 "," type ":" platform "}}}},
neodymium
1
Danke dir. Diese 2 einfachen Schritte lösten das Problem. Hoffentlich wird MS es in naher Zukunft entwicklerfreundlicher machen.
EvZ
20

Ich habe diesen Fehler erhalten, weil ich den unglaublich kaputten NuGet Package Manager in Visual Studio 2015 verwendet habe, um meine project.json-Abhängigkeiten zu aktualisieren. Es drehte sich dies:

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

das mögen:

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

Tschüss, Plattformdefinition!

NathanAldenSr
quelle
15

Wenn Sie diese beiden Links lesen:

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

und

zweitens https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

Sie werden sehen, dass Sie eine vollständig portable Version mithilfe des folgenden Snippets im Abhängigkeitsstammelement in project.json erstellen können. Es ist nicht erforderlich, Laufzeiten anzugeben, da dies eine Laufzeit auf CORE-Ebene ist, die plattformunabhängig sein sollte oder als "Framework-abhängig" bezeichnet wird.

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

oder Sie können für mehrere Zielplattformen ("eigenständige Anwendungen") erstellen, indem Sie das Element type: platform wie folgt entfernen:

Fügen Sie dies dem Stammelement für Abhängigkeiten in project.json hinzu

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

und fügen Sie dies als neues Element auf Stammebene hinzu

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

Für mehrere Zielvorgaben müssen Sie Plattformnamen angeben, die als ".NET Core Runtime IDentifiers (RID)" bezeichnet werden. Eine Liste dieser Namen finden Sie unter dem zweiten Link oben. Es enthält viele Varianten von Windows, Linux und OS X.

Um einen guten Überblick über die verschiedenen Bereitstellungsoptionen zu erhalten, können Sie auch diese Seite lesen:

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

Über den obigen Link:

Sie können zwei Arten von Bereitstellungen für .NET Core-Anwendungen erstellen:

Framework-abhängige Bereitstellung

Wie der Name schon sagt, basiert die Framework-abhängige Bereitstellung (FDD) auf einer gemeinsam genutzten systemweiten Version von .NET Core, um auf dem Zielsystem vorhanden zu sein. Da .NET Core bereits vorhanden ist, kann Ihre App auch zwischen Installationen von .NET Core portiert werden. Ihre App enthält nur eigenen Code und Abhängigkeiten von Drittanbietern, die sich außerhalb der .NET Core-Bibliotheken befinden. FDDs enthalten DLL-Dateien, die mit dem Dienstprogramm dotnet über die Befehlszeile gestartet werden können. Beispielsweise führt dotnet app.dll eine Anwendung mit dem Namen app aus.

Eigenständige Bereitstellung

Im Gegensatz zu FDD erfordert eine eigenständige Bereitstellung (SCD) keine gemeinsam genutzten Komponenten, die auf dem Zielsystem vorhanden sind. Alle Komponenten, einschließlich der .NET Core-Bibliotheken und der .NET Core-Laufzeit, sind in der Anwendung enthalten und von anderen .NET Core-Anwendungen isoliert. SCDs enthalten eine ausführbare Datei (z. B. app.exe auf Windows-Plattformen für eine Anwendung mit dem Namen app), eine umbenannte Version des plattformspezifischen .NET Core-Hosts, und eine DLL-Datei (z. B. app.dll) die eigentliche Anwendung.

BigTFromAZ
quelle
9

In meinem Fall hatte ich gerade alle Nuget-Pakete auf die neuesten Versionen aktualisiert und Nuget hat meinen Paketverweis "Microsoft.NETCore.App" wie folgt geändert:

"Microsoft.NETCore.App": "1.1.0"

Ich habe es wieder in die folgende Form geändert und alles hat gut funktioniert:

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

Auf Wiedersehen 3 Stunden meines Lebens ....

Alex Hope O'Connor
quelle
4

Wenn Sie ein neues Dotnet ausführen und sich das Ausgabeprojekt json ansehen, werden Sie feststellen, dass sich die Moniker geändert haben.

Nehmen Sie die Änderungen an Ihrer project.json wie folgt vor:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }
John Banks
quelle
Für mich ist das die beste Lösung. .NET Core ist in Bewegung und die Dinge ändern sich ständig. Verwenden der CLI zum Generieren einer project.json zum Korrigieren von Änderungen in Ihrer project.json, die NuGet PM nicht konsistent und aktualisiert zu halten scheint.
James B
0

Ich habe einen nützlichen Link aus dem Kommentar von svick auf der folgenden Seite gefunden: https://github.com/dotnet/cli/issues/2442

Technorider
quelle
1
Obwohl Ihre Antwort zu 100% korrekt ist, kann sie auch zu 100% unbrauchbar werden, wenn dieser Link verschoben, geändert, zu einer anderen zusammengeführt wird oder die Hauptseite einfach verschwindet ... :-( Bearbeiten Sie daher bitte Ihre Antwort und kopieren Sie die entsprechende Schritte vom Link in Ihre Antwort, wodurch Ihre Antwort für 100% der Lebensdauer dieser Website garantiert wird! ;-) Sie können den Link jederzeit am Ende Ihrer Antwort als Quelle für Ihr Material belassen ...
Donald Duck
0

Ich habe festgestellt, dass Sie in project.json Folgendes benötigen. Folgendes war erforderlich, um meinen Fehler zu beheben:

Abhängigkeiten

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

Frameworks

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

Laufzeit

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

Möglicherweise möchten Sie Laufzeiten hinzufügen, wenn Sie in IIS veröffentlichen möchten. Bitte sehen Sie etwas wie folgt:

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

Hier ist ein allgemeiner Tipp, der für mich gut funktioniert hat. Wenn meine Sachen kaputt gehen, erstelle ich manchmal eine Standard-ASP.NET Core-Anwendung, entweder die Website oder eine leere Web-API, um die Abhängigkeiten in project.json und anderswo zu untersuchen. Auf diese Weise kann man oft viele Dinge fangen. Die obigen Antworten sind genau richtig, aber ich dachte, ich würde dies hier schreiben, falls jemand die Logik im allgemeinen Vorlagenformat, das ASP.NET Core verwendet, stärker trennen möchte.

Hlyates
quelle
0

In Windows 7 mit VS 2015 änderte die Lösung nach dem Update auf netcore 1.1.2 die Datei project.json wie folgt:

{
"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
  }                             //
}

Nach dem Ändern werden die Abhängigkeiten aktualisiert und Viola.

Santiago Suarez
quelle