Bagaimana saya bisa mendiagnosis ketergantungan yang hilang (atau kegagalan loader lainnya) di dnx?

133

Saya mencoba menjalankan versi modifikasi dari sampel HelloWeb untuk ASP.NET vNext di DNX menggunakan Kestrel. Saya mengerti bahwa ini sangat sulit , tetapi saya berharap tim ASP.NET setidaknya akan membuat aplikasi web yang paling sederhana bekerja :)

Lingkungan Hidup:

  • Linux (Ubuntu, cukup banyak)
  • Mono 3.12.1
  • DNX 1.0.0-beta4-11257 (Saya juga memiliki 11249)

"Aplikasi Web" kode, di Startup.cs:

using Microsoft.AspNet.Builder;
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseWelcomePage();
    }
}

Konfigurasi proyek, di project.json:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
    "Microsoft.Framework.Runtime": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Common": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

kpm restore tampaknya berfungsi dengan baik.

Namun, ketika saya mencoba menjalankan, saya mendapatkan pengecualian yang menunjukkan bahwa Microsoft.Framework.Runtime.IApplicationEnvironmenttidak dapat ditemukan. Baris perintah dan kesalahan (agak diformat ulang)

.../HelloWeb$ dnx . kestrel
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
or one of its dependencies.
File name: 'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
    (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke 
    (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder,
     System.Object[] parameters, System.Globalization.CultureInfo culture)
    [0x00000] in <filename unknown>:0

Meskipun jelas, kebutuhan saya yang paling mendesak adalah untuk memperbaikinya, saya juga menghargai saran tentang cara pindah untuk mendiagnosis apa yang salah sehingga saya dapat memperbaiki sendiri masalah serupa di masa mendatang. (Itu juga kemungkinan akan membuat pertanyaan ini lebih bermanfaat bagi orang lain.)

Saya telah menemukan Microsoft.Framework.Runtime.IApplicationEnvironmentdi Microsoft.Framework.Runtime.Interfacessumber perakitan , dan itu tampaknya tidak berubah baru-baru ini. Tidak jelas mengapa pengecualian menunjukkan nama seolah-olah itu adalah seluruh rakitan itu sendiri, bukan hanya antarmuka dalam rakitan lain. Saya menduga ini mungkin karena perakitan antarmuka netral , tetapi tidak jelas dari kesalahan. ( [AssemblyNeutral]Sudah mati, jadi bukan itu ... )

Jon Skeet
sumber
karena penasaran, maksud Anda menautkan ke github.com/aspnet/Home/wiki/Assembly-Neutral-Interfaces untuk tautan antarmuka antarmuka perakitan Anda atau di tempat lain? Karena saat ini rusak
cgijbels
@cgijbels: Terima kasih - Sebenarnya saya bermaksud menautkan ke davidfowl.com/assembly-neutral-interfaces tetapi tautan Anda mungkin lebih baik ...
Jon Skeet
@JonSkeet perakitan antarmuka netral kini hilang.
tugberk
@tugberk: Astaga, benarkah? Itu menarik - apakah Anda memiliki tautan yang dapat saya sertakan dalam suntingan?
Jon Skeet
@JonSkeet github.com/aspnet/Configuration/commit/… mungkin? :)
tugberk

Jawaban:

144

Pertanyaan bagus. Untuk masalah spesifik Anda, sepertinya Anda memiliki ketidakcocokan dalam dependensi yang Anda selesaikan. Ketika hal-hal seperti ini terjadi, itu kemungkinan karena Anda menjalankan aplikasi pada dnx yang tidak kompatibel. Kami masih membuat perubahan sangat besar jadi jika Anda pernah melihat metode yang hilang dari jenis yang hilang, kemungkinan Anda akhirnya menjalankan betaXpaket dan betaYdnx atau sebaliknya.

Lebih khusus lagi, Assembly Neutral Interfaces telah dihapus dalam versi beta4 tetapi sepertinya aplikasi yang Anda jalankan masih menggunakannya.

Kami memiliki rencana untuk membuatnya sehingga paket dapat menandai dnx minimum yang harus dijalankan untuk membuat pesan kesalahan lebih jelas. Seiring berjalannya waktu, perubahan yang terjadi akan mereda.

Secara umum, saya merasa sudah waktunya saya menulis panduan tentang cara mendiagnosis masalah seperti ini ketika menggunakan dnx (karena ini cukup berbeda dengan .NET yang ada).

Ketergantungan yang Anda masukkan project.jsonhanya tingkat atas. Versi juga selalu minimum (seperti paket NuGet). Ini berarti bahwa ketika Anda menentukan Foo 1.0.0-beta4Anda benar-benar menentukan Foo >= 1.0.0-beta4. Ini berarti jika Anda meminta MVC 0.0.1dan versi minimum pada umpan yang Anda konfigurasikan adalah MVC 3.0.0, Anda akan mendapatkannya. Kami juga TIDAK PERNAH melayang versi Anda kecuali Anda menentukannya. Jika Anda meminta 1.0.0 dan itu ada, Anda akan mendapatkan 1.0.0 bahkan jika versi yang lebih baru ada. Menentukan versi kosong SELALU buruk dan akan ditolak di build selanjutnya.

Ada fitur baru yang kami perkenalkan ke nuget yang disebut versi mengambang. Hari ini hanya berfungsi pada tag pra-rilis, tetapi pada versi berikutnya akan berfungsi pada lebih banyak bagian dari versi. Ini mirip dengan sintaks npm dan gem untuk menentukan rentang versi dalam file spesifikasi paket.

1.0.0-*- Berarti memberi saya versi TERTINGGI yang cocok dengan awalan (menurut aturan versi semantik ) ATAU jika tidak ada versi yang cocok dengan awalan itu, gunakan perilaku normal dan dapatkan saya versi TERENDAH> = versi yang ditentukan.

Ketika Anda menjalankan restore di build terbaru, itu akan menulis file bernama project.lock.json. File ini akan memiliki penutupan transitif dependensi untuk semua kerangka kerja target yang didefinisikan dalam project.json.

Ketika sesuatu seperti ini gagal, Anda dapat melakukan hal berikut:

Lihatlah dependensi yang diselesaikan menggunakan kpm list. Ini akan menunjukkan kepada Anda versi-versi paket yang diselesaikan yang dirujuk oleh proyek Anda dan ketergantungan apa yang menariknya. Misalnya jika A -> B, itu akan menunjukkan:

SEBUAH
  -> B
B
 ->

Output daftar KPM aktual:

Ketergantungan dependensi untuk ClassLibrary39 (C: \ Users \ davifowl \ Documents \ Visual Studio 14 \ Projects \ ClassLibrary39 \ src \ ClassLibrary39 \ project.json)

[Target framework DNX,Version=v4.5.1 (dnx451)]

 framework/Microsoft.CSharp 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/mscorlib 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System.Core 4.0.0.0
    -> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0

[Target framework DNXCore,Version=v5.0 (dnxcore50)]

*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0
 System.Runtime 4.0.20-beta-22709
    -> ClassLibrary39 1.0.0

* Berarti ketergantungan langsung.

Jika Anda memiliki studio visual yang berfungsi (yang terputus dengan DNX sekarang), Anda dapat melihat node referensi. Ini memiliki data yang sama diwakili secara visual:

Referensi simpul

Mari kita lihat seperti apa kegagalan dependensi:

Inilah project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "Newtonsoft.Json": "8.0.0"
    },

    "frameworks" : {
        "dnx451" : { 
            "dependencies": {
            }
        },
        "dnxcore50" : { 
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22709"
            }
        }
    }
}

Newtonsoft.Json 8.0.0tidak ada. Jadi menjalankan kpm restore menunjukkan hal berikut:

masukkan deskripsi gambar di sini

Ketika mendiagnosis ketika pemulihan mungkin gagal, lihat permintaan HTTP yang dibuat, mereka memberi tahu Anda apa yang dilihat oleh sumber paket yang dikonfigurasikan kpm. Perhatikan pada gambar di atas, ada CACHEpermintaan. Ini adalah caching bawaan berdasarkan jenis sumber daya (nupkg atau nuspec) dan memiliki TTL yang dapat dikonfigurasi (lihat kpm restore --help). Jika Anda ingin memaksa kpmuntuk menekan sumber NuGet jarak jauh, gunakan --no-cachebendera:

KPM mengembalikan --no-cache

Kesalahan ini juga muncul di Visual Studio di jendela output log manajer paket:

masukkan deskripsi gambar di sini

Catatan samping!

Sumber Paket

Saya akan menjelaskan cara kerja NuGet.config sekarang (yang kemungkinan akan berubah di masa depan). Secara default Anda memiliki NuGet.config dengan sumber NuGet.org default yang dikonfigurasi secara global di %appdata%\NuGet\NuGet.Config. Anda dapat mengelola sumber-sumber global ini dalam studio visual atau dengan alat baris perintah NuGet. Anda harus selalu melihat sumber efektif Anda (yang tercantum dalam output kpm) ketika mencoba mendiagnosis kegagalan.

Baca lebih lanjut tentang NuGet.config di sini

Kembali pada kenyataan:

Ketika dependensi tidak terselesaikan, menjalankan aplikasi akan memberi Anda ini:

> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
   Newtonsoft.Json 8.0.0

Searched Locations:
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
  C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll

Try running 'kpm restore'.

   at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
   at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
   at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)

Runtime pada dasarnya mencoba untuk memvalidasi bahwa seluruh grafik dependensi diselesaikan sebelum mencoba untuk menjalankan. Jika disarankan berjalan kpm restoreitu karena tidak dapat menemukan dependensi yang tercantum.

Alasan lain mengapa Anda mungkin mendapatkan kesalahan ini adalah jika Anda menjalankan rasa dnx yang salah. Jika aplikasi Anda hanya menentukan dnx451 dan Anda mencoba menjalankan dnx CoreCLR, Anda mungkin melihat masalah yang sama. Perhatikan kerangka kerja target dalam pesan kesalahan:

Untuk menjalankan:

dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}

Ketika Anda mencoba untuk menjalankan, Anda harus ingat bahwa pemetaan mental dari CLR ke kerangka kerja target yang didefinisikan dalam Anda project.json.

Ini juga muncul di Visual Studio di bawah simpul referensi: Ketergantungan yang belum terselesaikan

Node yang ditandai sebagai kuning tidak terselesaikan.

Ini juga muncul di daftar kesalahan:

Daftar galat dependensi yang belum terselesaikan

Bangunan

Kesalahan ini juga muncul saat membangun. Ketika membangun dari baris perintah, outputnya sangat verbose dan bisa sangat berguna ketika mendiagnosis masalah:

> kpm build

Building ClassLibrary39 for DNX,Version=v4.5.1
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Assembly dependency framework/mscorlib 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll

  Using Assembly dependency framework/System 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll

  Using Assembly dependency framework/System.Core 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll

  Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll


Building ClassLibrary39 for DNXCore,Version=v5.0
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Package dependency System.Console 4.0.0-beta-22709
    Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
    File: lib\contract\System.Console.dll

  Using Package dependency System.IO 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
    File: lib\contract\System.IO.dll

  Using Package dependency System.Runtime 4.0.20-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
    File: lib\contract\System.Runtime.dll

  Using Package dependency System.Text.Encoding 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
    File: lib\contract\System.Text.Encoding.dll

  Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
    File: lib\contract\System.Threading.Tasks.dll

Keluaran menunjukkan semua rakitan dilewatkan ke kompiler dari paket dan referensi proyek. Ketika Anda mulai mendapatkan kegagalan membangun, penting untuk melihat di sini untuk memastikan bahwa paket yang Anda gunakan benar-benar berfungsi pada platform target itu.

Berikut ini contoh paket yang tidak berfungsi pada dnxcore50:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.Owin.Host.SystemWeb": "3.0.0"
    },

    "frameworks": {
        "dnx451": {
            "dependencies": {
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-22709"
            }
        }
    }
}

Microsoft.Owin.Host.SystemWeb versi 3.0.0 tidak memiliki rakitan yang berjalan di dnxcore50 (lihat folder lib paket unzipped). Ketika kami menjalankan kpm build:

Rakitan yang hilang di dnxcore50

Perhatikan ia mengatakan "menggunakan Paket Microsoft.Owin.Host.SystemWeb" tetapi tidak ada "File:". Ini bisa menjadi alasan kegagalan pembangunan.

Di sini berakhir dump otak saya

davidfowl
sumber
Saya mencoba menggunakan daftar dnu seperti yang Anda sarankan, untuk menentukan mengapa dnx tidak dapat menyelesaikan ketergantungan. Tapi saya mendapat "Tidak dapat menemukan project.json" merah. Perakitan ada di folder artefak, dihasilkan dengan memeriksa "Menghasilkan keluaran saat dibuat". Ada saran tentang cara melanjutkan?
Mike Scott
Apa hubungan folder artefak dengan apa pun? Apakah Anda merujuk ketergantungan pada project.json? Apakah paket yang Anda rujuk tersedia pada umpan yang dikonfigurasi?
davidfowl
17

Saya masih belum tahu sepenuhnya apa yang salah, tetapi saya sekarang memiliki serangkaian langkah untuk setidaknya membuatnya lebih mudah untuk mencoba berbagai hal:

  • Jika ragu, instal ulang dnx
    • Meniup cache paket dapat membantu
  • Periksa ~/.config/NuGet.configuntuk memastikan Anda menggunakan umpan NuGet yang tepat

Saya akhirnya menggunakan baris perintah berikut untuk menguji berbagai opsi dengan cara yang cukup bersih:

rm -rf ~/.dnx/packages && rm -rf ~/.dnx/runtimes && dnvm upgrade && kpm restore && dnx . kestrel

Sepertinya masalah saya sebenarnya karena versi dependensi yang salah diinstal. Sejumlah versi "1.0.0-beta4"tampaknya sangat berbeda dengan "1.0.0-beta4-*". Sebagai contoh, Kestrelketergantungan menginstal versi 1.0.0-beta4-11185 ketika hanya ditentukan sebagai 1.0.0-beta4, tetapi versi 1.0.0-beta4-11262 dengan -*di akhir. Saya ingin menentukan beta4secara eksplisit untuk menghindari kecelakaan menggunakan versi beta3 dengan

Konfigurasi proyek berikut berfungsi dengan baik:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4-*",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}
Jon Skeet
sumber
6
Ini karena -*selalu memberi Anda versi pra-rilis terbaru, sementara tanpanya Anda mendapatkan versi terendah yang memenuhi semua dependensi (seperti biasa dengan NuGet). Tes ini memiliki beberapa contoh.
Alexander Köplinger
2
@ AlexanderKöplinger: Terima kasih, itu masuk akal. Jadi ... beta4 adalah beta4 paling awal, sementara ... beta4- * adalah beta4 terbaru, kan?
Jon Skeet
4
"frameworks": {"dnx451": {}}telah diperbaiki untuk saya, tidak perlu untukdnxcore50
vicentedealencar
Perintah pertama Anda juga membantu saya melewati macet pada versi beta5. Saya mencoba menjalankan dnvm upgrade-self, ini tidak akan ditingkatkan ke versi terbaru. Menjalankan command prompt VS sebagai admin menunjukkan versi dnvm rc1..., namun ketika tidak sebagai admin itu beta5.... Setelah perintah Anda, baik admin dan non admin meminta petunjuk yang ditampilkan sebagai versi rc2...(terbaru).
JabberwockyDecompiler
Bagi mereka yang menggunakan mono dan bertanya-tanya apakah akan memilih dnx451atau dnxcore50jawaban ini membantu saya memahami topik ini sedikit lebih banyak: stackoverflow.com/a/30846048/89590 Jawaban singkat: dnx451sesuai untuk mono.
Nate Cook
8

Anda dapat mengatur var env bernama DNX_TRACEuntuk 1melihat TON info lebih lanjut diagnostik. Diperingatkan, ini info yang lebih banyak !

Eilon
sumber
@JonSkeet BTW jawaban lain (termasuk jawaban-diri Anda) berisi info hebat tentang mendiagnosis dan memperbaiki masalah khusus yang Anda temui. Saya menyimpan jawaban ini dengan sangat singkat karena itu adalah jawaban lain yang berbeda yang dapat menghasilkan lebih banyak petunjuk tentang mengapa masalah terjadi.
Eilon
Benar-benar - Saya menghargai itu :)
Jon Skeet
3

Untuk membuatnya berfungsi, saya memodifikasi project.json.. sekarang sepertinya:

{
"dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-*"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    }
}

Kuncinya sepertinya adalah bagian kerangka kerja.

Ubah nama juga mengubah cara k webkerjanya sehingga sekarang dnx . webataudnx . kestrel

Perbarui - sedikit lebih banyak info

Anehnya, setelah berjalan tanpa kerangka yang didefinisikan, ia pergi dan mendapatkan banyak hal tambahan ketika saya melakukannya kpm restore:

...
Installing Microsoft.Framework.Logging 1.0.0-beta4-11001
Installing Microsoft.Framework.Logging.Interfaces 1.0.0-beta4-11001
Installing Microsoft.Framework.DependencyInjection.Interfaces 1.0.0-beta4-11010
Installing Microsoft.Framework.DependencyInjection 1.0.0-beta4-11010
Installing Microsoft.Framework.ConfigurationModel 1.0.0-beta4-10976
Installing Microsoft.Framework.ConfigurationModel.Interfaces 1.0.0-beta4-10976
Installing Microsoft.AspNet.Hosting.Interfaces 1.0.0-beta4-11328
Installing Microsoft.AspNet.FeatureModel 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http 1.0.0-beta4-11104
Installing Microsoft.AspNet.FileProviders.Interfaces 1.0.0-beta4-11006
Installing Microsoft.Framework.Caching.Interfaces 1.0.0-beta4-10981
Installing Microsoft.AspNet.FileProviders 1.0.0-beta4-11006
Installing Microsoft.AspNet.Http.Core 1.0.0-beta4-11104
Installing Microsoft.AspNet.WebUtilities 1.0.0-beta4-11104
Installing Microsoft.Net.Http.Headers 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http.Interfaces 1.0.0-beta4-11104
Installing Microsoft.Framework.Runtime.Interfaces 1.0.0-beta4-11257
Installing Microsoft.AspNet.Server.Kestrel 1.0.0-beta4-11262
Installing Microsoft.Net.Http.Server 1.0.0-beta4-11698
Installing Microsoft.Net.WebSockets 1.0.0-beta4-11698
Installing Microsoft.Net.WebSocketAbstractions 1.0.0-beta4-10915
Installing Microsoft.Framework.WebEncoders 1.0.0-beta4-11104
Installing Microsoft.Framework.OptionsModel 1.0.0-beta4-10984
Installing Microsoft.AspNet.Http.Extensions 1.0.0-beta4-11104
Installing Microsoft.AspNet.Diagnostics.Interfaces 1.0.0-beta4-12451
Installing Microsoft.AspNet.RequestContainer 1.0.0-beta4-11328

.. maka itu berjalan dengan baik. Kemudian saya beralih kembali ke bagian framework

"frameworks": {
    "dnx451": {}
}

.. dan itu masih berfungsi, padahal sebelumnya akan memunculkan kesalahan!

Sangat aneh!

(Saya menjalankan 1.0.0-beta4-11257)

Pembaruan lebih lanjut

Saya memutar instance Ubuntu baru, dan mendapatkan kesalahan yang sama seperti Anda .. Pikir saya adalah bahwa masalah mungkin disebabkan oleh itu hanya mencoba untuk mendapatkan paket dari nuget.orgdan tidak myget.org(yang memiliki hal-hal yang lebih baru) jadi saya turun NuGet.Configke dalam root dari proyek ..

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

.. ini sepertinya telah memperbaikinya untuk saya dengan mendapatkan versi yang benar (setelah yang lain kpm restore).

Stephen Pope
sumber
1
Kembali bagian "dnx. Kestrel" - memang, maka perintah yang saya perlihatkan :) Dengan konfigurasi itu, saya mendapatkan kesalahan yang berbeda: System.TypeLoadException: Tidak dapat memuat ketik 'Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions' dari assembly 'Microsoft. Framework.Logging, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = null '. DNX versi apa yang Anda gunakan?
Jon Skeet
1
Ketika saya melakukan "dnx. Web" pertama kali saya mendapat: `System.InvalidOperationException: Gagal menyelesaikan dependensi berikut untuk kerangka kerja target 'DNX, Version = v4.5.1' dan menyarankan daftar hal-hal yang hilang.
Stephen Pope
Menarik. Apa platform ini, btw?
Jon Skeet
Apakah Anda melakukan 'sumber ~ / .bashrc' untuk memuat ulang variabel lingkungan setelah Anda memutakhirkan DNX? Juga saya harus melakukan "upgrade dnvm" + "dnvm gunakan default"
Stephen Pope
DNX belum diperbarui oleh .bashrc ... mungkin karena saya membuatnya secara manual kemarin. Akan mencoba menggunakan petunjuk yang diperbarui sebagai gantinya ...
Jon Skeet
2

Hari ini, semua package.jsonversi saya berakhir dengan"-rc2-*"

(Hanya pengecualian yang saya lihat sejauh ini adalah Microsoft.Framework.Configurationpaket - paketnya, yang perlu salah satu "1.0.0-rc1-*"atau "1.0.0-*")

Mengenai "kereta versi" yang @davidfowl sebutkan, sepertinya BANYAK rasa sakit telah menghilang antara beta8 dan rc2.

dnvm upgrade -u -arch x64 -r coreclr

Saya paling beruntung coreclrdengan 2 umpan NuGet ini:

"https://www.myget.org/F/aspnetvnext/"
"https://nuget.org/api/v2/"

Ketika saya lakukan telah hilang masalah paket, 90% dari waktu itu ini penyebab yang sama:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Sebagian besar waktu, saya bisa mengatasi ini dengan memaksa feed NuGet.org utama:

dnu restore;
dnu restore -s https://nuget.org/api/v2

Ini config.json yang berfungsi:

{
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc2-*",
    "Microsoft.AspNet.Hosting": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Core": "6.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Razor": "6.0.0-rc2-*",
    "Microsoft.AspNet.Owin": "1.0.0-rc2-*",
    "Microsoft.AspNet.Routing": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-*",
    "Microsoft.AspNet.Session": "1.0.0-rc2-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-*",
    "EntityFramework.Commands": "7.0.0-rc2-*",
    "EntityFramework.Core": "7.0.0-rc2-*",
    "EntityFramework.InMemory": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc2-*",
    "EntityFramework.Relational": "7.0.0-rc2-*",
    "EntityFramework7.Npgsql": "3.1.0-beta8-2",
    "Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Framework.Configuration.CommandLine": "1.0.0-*",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
},
"commands": {
    "ef": "EntityFramework.Commands",
    "dev": "Microsoft.AspNet.Hosting --ASPNET_ENV Development --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnxcore50": {}
}
}
CrazyPyro
sumber
Daftar di atas bukan dari config.json tetapi lebih pada project.json tetapi saya tetap upvoted karena daftar itu memberi saya dependensi yang berguna yang sebelumnya tidak saya ketahui.
Ron C
1

Saya mengalami masalah ketergantungan yang hilang juga dengan mencoba untuk menenangkan referensi dnxcore50 dan dnx451.

Jika saya memahami hak ini, "dependensi": {} dibagi di antara kerangka kerja.

Lalu "dependensi": {} di dalam "kerangka kerja": khusus untuk kerangka itu.

dnxcore50 adalah runtime modular (mandiri) sehingga pada dasarnya berisi semua runtime inti perlu menjalankan program tidak seperti kerangka kerja .net klasik di mana Anda memiliki dependensi inti yang tersebar di tempat lain.

Jadi dengan mengatakan bahwa saya ingin tetap berpegang pada pendekatan minimal saya memutuskan untuk meng-host di mac atau linux di beberapa titik.

Perbarui Ran menjadi masalah ketergantungan yang aneh dengan tampilan cshtml, baru saja berjalan dengan dnx451 untuk saat ini.

Ini proyek saya. Json

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
    "System.Runtime": "4.0.10",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6-12075",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12457",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta4",
    "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta5"
 },

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://admin.heartlegacylocal.com"  },

"frameworks": {
"dnx451": { }
 }
},

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
  "wwwroot",
  "node_modules",
  "bower_components"
  ]
}
dynamiclynk
sumber