Tidak dapat menemukan target runtime untuk framework .NETCoreApp = v1 kompatibel dengan salah satu runtime target

149

Saya mencoba untuk memigrasi proyek Asp.Net Core RC1 ke RC2 dan telah mengikuti dokumentasi ini dan juga telah mengikuti instruksi untuk migrasi DNX ke. NET CLI.

Saya mendapatkan kesalahan berikut ketika saya mencoba dotnet run:

Tidak dapat menemukan target runtime untuk framework '.NETCoreAPP, Versi = v1.0' kompatibel dengan salah satu runtime target: 'win10-x64, win81-x64, win8-x64, win8-x64, win7-x64'. Kemungkinan penyebab:

  1. Proyek belum dipulihkan atau mengembalikan gagal -lari 'dotnet restore'
  2. Proyek tidak mencantumkan salah satu dari 'win10-x64, win81-x64, win7-x64' di 'runtimes'

Saya telah menjalankan dotnet restoredan tampaknya telah berhasil diselesaikan.

Saya telah memperbarui semua paket yang relevan ke RC2.

Blake Mumford
sumber

Jawaban:

290

Saya seharusnya melakukan persis apa yang dikatakan pesan kesalahan. Ketika bermigrasi dari RC1, saya tidak menyadari bahwa saya harus menentukan runtimesbagian dalam project.jsonfile saya .

Di saya, project.jsonsaya menambahkan bagian berikut:

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

Dan saya baik untuk pergi.


Pembaruan 27 Februari 2017

Template proyek baru di Visual Studio 2017 RC tidak lagi memerlukan waktu berjalan yang ditentukan (dalam project.jsonatau .csproj) di muka jika Anda memilih untuk menggunakan aplikasi Anda sebagaiFramework Dependent Deployment (FDD).

Namun, jika Anda memilih untuk menggunakan aplikasi Anda menggunakan Self-contained Deployment(SCD), maka Anda akan perlu menentukan semua kali run Anda ingin aplikasi Anda untuk berjalan di di muka dalam Anda .csprojberkas.

Di bawah ini adalah contoh .csprojfile untuk aplikasi yang menggunakan metode penyebaran 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>

Silakan lihat tautan ini untuk informasi lebih lanjut, yang mencakup deskripsi menyeluruh dari kedua jenis opsi penempatan, serta keuntungan dan kerugiannya.

Blake Mumford
sumber
42
Saya membuat proyek baru di VS 2015 Pembaruan 3. Dan bagian ini masih hilang.
Edward Olamisan
7
Saya pikir tidak selalu perlu untuk menambahkan pengaturan ini. Dokumentasi mengatakan: "Jika Anda adalah perpustakaan kelas portabel yang dapat berjalan pada runtime apa pun, Anda tidak perlu menentukan runtime." - Itu benar untuk sebagian besar proyek saya, tetapi kesalahan ini muncul ketika saya menambahkan proyek Core Framework Entity ke solusi saya. Saya pikir EF Core - setidaknya dalam kondisi RC2 - memiliki batasan pada platform mana ia dapat berjalan, dengan demikian, proyek yang merujuknya, mungkin perlu mematuhi pengaturan tersebut. Tapi saya hanya menebak. Dokumentasi benar-benar membingungkan pada titik ini.
Bernhard Koenig
7
Bahkan tidak memerlukan ini pada template 1.0 Core VS2015 baru, diperbarui ke 1.0.1 dan mendapat kesalahan di atas, terima kasih untuk memperbaikinya!
Steve McNiven-Scott
1
@ SteveMcNiven-Scott - Sama di sini. Saya juga harus menambahkan baris lain di "runtimes" untuk mendapatkannya untuk memulihkan dan membangun di Server Ubuntu: "ubuntu.16.04-x64". YMMV tetapi kesalahannya harus menunjukkan platform yang Anda lewatkan dan perlu ditambahkan.
Tsar Bomba
5
Pesan kesalahan tidak menyebutkan "project.json". Bagaimana orang bisa menebak ??
bermanfaatBee
76

Saya menerima kesalahan ini setelah memperbarui template inti VS2015 ke 1.0.1. Itu karena saya memiliki PCL yang menargetkan netstandard 1.4 jika Anda tidak ingin harus menentukan setiap runtime, Cukup ubah markup ketergantungan untuk Microsoft.NETCore.Appini:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Mike_G
sumber
1
Markup di atas memperbaiki kesalahan kompilasi saya, tetapi IIS Express tidak akan mulai setelah itu. Mengubah "versi": "1.0.1" menjadi "versi": "1.0.0" memecahkan masalah IIS.
Ross
@Ross memperbarui bagian alat di project.json agar sesuai dengan versi NETCore.App
DalSoft
Dalam hal ini "alat": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
DalSoft
1
@DalSoft - Ya, saya memperbarui VS 2015 saya beberapa minggu yang lalu dengan tambalan terbaru termasuk IISIntegration.Tools, dan itu memecahkan masalah Microsoft.NETCore.App: 1.0.1 untuk saya.
Ross
1
@usefulBee Portable Class Library
Mike_G
35

di project.json saya mengubah ini (tipe ditambahkan):

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

Sekarang saya bisa membangun lagi :-)

pembaruan: sekarang saya dapat membangun lagi tetapi tidak "menjalankan" situs web.

Anda perlu memastikan bahwa Anda memiliki runtime dan SDK juga:

*) Alat Visual Studio termasuk .NET Core 1.0.1. Untuk menambahkan dukungan .NET Core 1.1 Anda juga harus menginstal runtime .NET Core 1.1.

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

juFo
sumber
1
Sepertinya Anda tidak dapat menjalankan situs web karena Anda harus menginstal .NET Core 1.1 SDK
Victor Sharovatov
dan kadang-kadang menginstal ulang Runtime juga diperlukan saya mengetahuinya.
JuFo
Ini membantu saya. Terima kasih! Mengomentari "Microsoft.NETCore.App" langsung dari dependensi di project.json dan mengubahnya menjadi di bawah "kerangka kerja": {"netcoreapp1.1": {"dependensi": {"Microsoft.NETCore.App": {" versi ":" 1.1.0 "," ketik ":" platform "}}}},
neodymium
1
Terima kasih. 2 langkah sederhana ini menyelesaikan masalah. Semoga MS akan membuatnya lebih ramah bagi pengembang dalam waktu dekat.
EvZ
20

Saya menerima kesalahan ini karena saya menggunakan Manajer Paket NuGet yang sangat rusak di Visual Studio 2015 untuk memperbarui dependensi project.json saya. Ternyata ini:

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

dalam hal ini:

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

Sampai jumpa, definisi platform!

NathanAldenSr
sumber
15

Jika Anda membaca dua tautan ini:

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

dan

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

Anda akan melihat bahwa Anda dapat membangun versi yang sepenuhnya portabel menggunakan cuplikan berikut dalam elemen akar dependensi di project.json. Tidak perlu menentukan runtime karena ini adalah runtime tingkat CORE yang seharusnya platform agnostik, atau dikenal sebagai "Kerangka tergantung"

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

atau Anda dapat membangun untuk beberapa platform bertarget ("aplikasi mandiri") dengan menghapus jenis: elemen platform seperti ini:

Tambahkan ini ke elemen akar dependensi di project.json

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

dan tambahkan ini sebagai elemen level root baru

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

Bertarget ganda mengharuskan Anda memberikan nama platform yang dikenal sebagai ".NET Core Runtime IDentifiers (RID)" Daftar ini dapat ditemukan di tautan kedua di atas. Ini mencakup banyak rasa Windows, Linux dan OS X.

Untuk tinjauan umum yang baik dari berbagai pilihan penerapan, Anda dapat membaca halaman ini juga:

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

Dari tautan di atas:

Anda dapat membuat dua jenis penggunaan untuk aplikasi .NET Core:

Penerapan kerangka kerja bergantung

Sesuai namanya, deployment-dependent deployment (FDD) bergantung pada versi bersama sistem .NET Core untuk hadir pada sistem target. Karena .NET Core sudah ada, aplikasi Anda juga portabel di antara instalasi .NET Core. Aplikasi Anda hanya berisi kode sendiri dan dependensi pihak ketiga apa pun yang berada di luar perpustakaan .NET Core. FDD berisi file .dll yang dapat diluncurkan dengan menggunakan utilitas dotnet dari baris perintah. Misalnya, dotnet app.dll menjalankan aplikasi bernama aplikasi.

Penempatan mandiri

Tidak seperti FDD, penyebaran mandiri (SCD) tidak bergantung pada komponen bersama untuk hadir pada sistem target. Semua komponen, termasuk pustaka .NET Core dan .NET Core runtime, disertakan dengan aplikasi dan diisolasi dari aplikasi .NET Core lainnya. SCD termasuk executable (seperti app.exe pada platform Windows untuk aplikasi bernama aplikasi), yang merupakan versi berganti nama dari host .NET Core khusus platform, dan file .dll (seperti app.dll), yang merupakan aplikasi yang sebenarnya.

BigTFromAZ
sumber
9

Dalam kasus saya, saya baru saja memperbarui semua paket nuget ke versi terbaru dan nuget mengubah referensi paket 'Microsoft.NETCore.App' saya menjadi sebagai berikut:

"Microsoft.NETCore.App": "1.1.0"

Saya mengubahnya kembali ke bentuk berikut dan semuanya bekerja dengan baik:

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

Selamat tinggal 3 jam dalam hidupku ....

Alex Hope O'Connor
sumber
4

jika Anda menjalankan dotnet baru dan melihat proyek keluaran json, Anda akan melihat bahwa monikers telah berubah.

Buat perubahan pada project.json Anda sebagai berikut:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }
John Banks
sumber
Bagi saya ini adalah solusi terbaik. .NET Core dalam keadaan fluks dan banyak hal terus berubah. Menggunakan CLI untuk membuatkan Anda project.json untuk memperbaiki perubahan di project.json Anda bahwa NuGet PM tampaknya tidak dapat tetap konsisten dan diperbarui.
James B
0

Saya menemukan satu tautan bermanfaat dari komentar oleh svick di bawah halaman berikut: https://github.com/dotnet/cli/issues/2442

Technorider
sumber
1
Meskipun jawaban Anda 100% benar, mungkin juga menjadi 100% tidak berguna jika tautan itu dipindahkan, diubah, digabung menjadi yang lain atau situs utama menghilang ... :-( Oleh karena itu, harap edit jawaban Anda, dan salin yang relevan langkah-langkah dari tautan ke jawaban Anda, dengan demikian menjamin jawaban Anda untuk 100% seumur hidup situs ini! ;-) Anda selalu dapat meninggalkan tautan di bagian bawah jawaban Anda sebagai sumber untuk materi Anda ...
Donald Duck
0

Saya menemukan Anda memerlukan yang berikut di project.json. Inilah yang diperlukan untuk memperbaiki kesalahan saya:

Ketergantungan

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

Kerangka kerja

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

Runtime

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

Anda mungkin ingin menambahkan runtime jika Anda berencana menerbitkan ke IIS. Silakan lihat sesuatu sebagai berikut:

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

Berikut ini tip umum yang telah bekerja dengan baik untuk saya. Ketika barang saya rusak, saya kadang-kadang membuat aplikasi ASP.NET Core default baik situs web atau web api kosong untuk melihat dependensi di project.json dan di tempat lain. Anda sering dapat menangkap banyak hal seperti itu. Jawaban di atas tepat, tapi saya pikir saya akan menulis ini di sini jika seseorang ingin memisahkan logika lebih banyak dalam format template umum yang menggunakan ASP.NET Core.

hlyates
sumber
0

Di Windows 7 dengan VS 2015, solusi setelah memperbarui ke netcore 1.1.2 mengubah file project.json sebagai berikut:

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

Setelah mengubah ini, dependensi akan memperbarui dan biola.

Santiago Suarez
sumber