SORU
12 Mart 2015, PERŞEMBE


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.Bu tahmin ediyorumolabilirassembly neutral interfaces nedeniyle olabilir ama hata belli değil.([AssemblyNeutral] is dead, so that's not it...)

CEVAP
20 Mart 2015, Cuma


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:

References node

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:

enter image description here

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:

KPM restore --no-cache

Bu hatalar da Paket Yöneticisi Visual Studio output penceresinde göstermek günlüğü:

enter image description here

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. Unresolved dependencies

Düğümler sarı olarak işaretlenmiş çözülmemiş.

Bu da hata listesinde görünüyor:

Error list unresolved dependencies

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:

Missing assemblies on dnxcore50

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ü

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • DominicFear

    DominicFear

    30 Kasım 2006