Nasıl eksik bağımlılıklar (veya başka bir loader hataları) teşhis dnx miyim?
DNX Kerkenez kullanarak ASP.NET vNext HelloWeb sample değiştirilmiş bir sürümü çalıştırmak için çalışıyorum. Bu olduğunu anlıyorumçokkanama kenarında çok ama ASP.NET takım en azından olabildiğince basit web uygulaması çalışma:) umardım
Çevre:
- Linux, hemen hemen) Ubuntu
- Mono 3.12.1
- 1.0.0-beta4-11257 (11249 mevcut de var) DNX
"", Startup.cs
kod: . Web app
using Microsoft.AspNet.Builder;
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
Proje yapılandırma, 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
iyi iş gibi görünüyor.
Çalıştırmak için çalıştığınızda, ancak, bir istisna Microsoft.Framework.Runtime.IApplicationEnvironment
bulunamıyor öneriyorum. Satır ve hata (biraz) reformasyon komut
.../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
Açıkçası beni en çok sıkıntıya gerek bunu düzeltmek için olsa da, aynı zamanda benzer konularda kendimi gelecekte düzeltebilirim yani yanlış giden şeyin ne olduğunu teşhis taşımak için tavsiyeler memnun olurum. (O da bu soru diğerleri için daha faydalı, çok daha iyi.)
Microsoft.Framework.Runtime.Interfaces
assembly source Microsoft.Framework.Runtime.IApplicationEnvironment
buldum ve son zamanlarda değişmiş görünmüyor. Bu durum eğer başka bir derleme içinde kendi içinde bir bütün Kurul yerine, sadece bir arayüz gibi adını gösterir neden net değil.[AssemblyNeutral]
is dead, so that's not it...)
CEVAP
Güzel soru. Belirli bir sorun için, çözülmüş senin bağımlılıkları bir uyumsuzluk var gibi görünüyor. Böyle şeyler olduğunda uyumsuz bir dnx uygulama çalıştırıyorsanız, çünkü büyük olasılıkla. Hala çok büyük değişiklikleri yapıyoruz eğer hiç bir yöntem türü eksik eksik görmek, şans betaX
paketler ve betaY
dnx ya da tam tersi çalışan sona erdi.
Daha spesifik olarak, Assembly Neutral Interfaces beta4 çıkarıldı ama çalışan uygulama hala onları kullanıyor gibi görünüyor.
Paketleri çalıştırmak için gerekli minimum dnx mark, böylece bunu yapmak için planları hata mesajı daha açık yapmak zorundayız. Zaman geçtikçe de, kırılma değişiklikleri aşağı ölecek.
Genel olarak, ben bu dnx (oldukça farklı mevcut .beri kullanırken bu gibi sorunları teşhis etmek için nasıl bir rehber yazdım zamanı geldi gibi hissediyorum NET).
project.json
içine koymak bağımlılıkları sadece üst düzey. Versiyonları da vardırher zaman minimum(NuGet paketi gibi). Bu 23 ** belirttiğinizde gerçekten Foo >= 1.0.0-beta4
belirtme demektir. Bu MVC 0.0.1
talep edersen ve yapılandırılmış beslemesi minimum sürümleri bu seferki olacak MVC 3.0.0
. Biz deASLAsen belirtmedikçe sürümü yüzer. 1.0.0 için sormak ve eğer varsa, Eğer yeni sürümleri varsa bile 1.0.0 alacak. Boş sürümleri belirtmeHer ZAMANkötü ve kurar sonra bırakılmış olacak.
Kayan sürümleri denilen nuget için tanıtıyoruz yeni bir özelliği var. Bugün sadece yayın öncesi etiketi üzerinde çalışır, ancak bir sonraki sürüm Sürüm daha fazla parça üzerinde çalışmak olacak. Bu paket şartname dosyasında sürüm aralıkları belirtmek için etmesinin önünü ve gem sözdizimi benzer.
1.0.0-*
- Demek bana en YÜKSEK sürüm eşleşen önek (göre semantic versioning rules) YA da, yoktur sürümü eşleşen önek kullanmak normal bir davranış ve bana en DÜŞÜK sürüm >= belirtilen sürümü.
Son yapılarında geri çalıştırdığınızda, bir dosya project.lock.json
adı yazacak. Bu dosya, tüm hedef çerçeveler project.json
tanımlanan bağımlılıklar geçişli kapatılması gerekir.
Böyle bir şey başarısız olduğunda, aşağıdakileri yapabilirsiniz:
Çözüldü bağımlılıklar kpm list
kullanarak bir göz atın. Bu paket bağımlılığı çekti ne proje tarafından başvurulan çözülmüş sürümleri gösterecektir. örneğin, eğer Bir ->B, gösterecek:
A -> B B ->
KPR listesi gerçek çıktı:
ClassLibrary39 listesi bağımlılıklar (\ClassLibrary39\proje src C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\.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
* doğrudan bağımlılık anlamına gelir.
Eğer çalışan bir visual studio şu anda DNX tatili) varsa, başvurular düğümünü bakabilirsiniz. Aynı verileri görsel olarak temsil etmiştir:
Hadi bağımlılık hatası gibi görünüyor bak
İşte proje.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.0
yok. Yani KPR geri koşu aşağıda gösterilmiştir:
Geri yükleme başarısız olabilir zaman tanımada, HTTP istekleri yaptı bak, yapılandırılmış paket kaynakları baktı KPR ne olduğunu söylediler. Yukarıdaki resimde dikkat edin, CACHE
bir isteği var. Bu önbelleğe alma kaynak Türüne göre (nupkg veya nuspec) inşa edilmiş ve yapılandırılabilir bir TTL (kpm restore --help
bak). Eğer kpm
uzaktan NuGet kaynakları vurmak için zorlamak istiyorsanız, --no-cache
bayrağı kullanın:
Bu hatalar da Paket Yöneticisi Visual Studio output penceresinde göstermek günlüğü:
Not yan!
Paket Kaynakları
Yol NuGet anlatacağım.config çalışıyor şu an muhtemelen gelecekte de değişmeyecek. Varsayılan olarak bir NuGet var.varsayılan nuget.org kaynak ile config genel %appdata%\NuGet\NuGet.Config
yapılandırılmış. NuGet komut satırı aracı ile visual studio içinde veya bu küresel kaynakları yönetebilirsiniz. Her zaman hataları teşhis etmek için çalışırken etkili kaynakları (olanlar KPR çıktı listelenen) bakmak gerekir.
NuGet hakkında daha fazla bilgi edinin.here config
Gerçeğe geri
Bağımlılıkları çözülmemiş, uygulama çalıştıran bu verecektir:
> 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)
Çalışma zamanı, temelde bütün bağımlılık grafiği çalıştırmak için denemeden önce giderilmiş olup olmadığını doğrulamak için çalışır. Eğer varsa kpm restore
çalışan önerir bağımlılıklar listelenen bulamamak.
Bu hata olabilir başka bir sebebi ise yanlış dnx lezzet çalıştırıyorsanız. Uygulamanız yalnızca dnx451 belirtir ve CoreCLR bu dnx çalıştırmak için çalışırsanız, benzer bir sorun görebilirsiniz. Hata iletisi hedef çerçeve için ödeme yakın ilgi:
Çalıştırmak için:
dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}
Çalıştırmak için çalışırken, 42* *hedef çerçevesi içinde tanımlanan clr gelen zihinsel haritalama hatırlamanız gerekir.
Bu da başvurular düğümü altında Visual Studio gösterir.
Düğümler sarı olarak işaretlenmiş çözülmemiş.
Bu da hata listesinde görünüyor:
Bina
Bu hatalar da oluştururken göstermek. Komut satırından oluştururken, çıktı, çok ayrıntılı ve sorunları teşhis son derece yararlı olabilir:
> 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
Çıkış derlemeler paketleri ve proje başvuruları derleyici geçirilen tüm gösterir. Sen oluşturma başarısız başladığında, yararlı burada kullandığınız paketin hedef platformu üzerinde çalıştığından emin olmak için bak.
İşte dnxcore50 işe yaramaz bir paket bir örnek:
{
"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.Ana.SystemWeb sürüm 3.0.0 dnxcore50 (fermuarını açıp paketin lib dosyasına bakabilir) üzerinde çalışan herhangi derlemeler sahip değil. kpm build
çalıştırın:
Dikkat edin "diyor kullanarak Paketi Microsoft.Owin.Ana."Ama yok":". Dosya SystemWeb Bu yapı bir başarısızlık nedeni olabilir.
Burada bitiyor benim beyin dökümü
Nasıl bir dize başka bir dize içeriyor...
Nasıl MAX(Sütun değeri), SQL başka bir...
Nasıl bir dizin C veya C kullanarak do...
Nasıl Java UTC veya GMT geçerli tarih ...
Nasıl herhangi bir URL veya web sayfas...