Dnx'te eksik bağımlılıkları (veya diğer yükleyici hatalarını) nasıl teşhis edebilirim?


133

Kestrel kullanarak DNX üzerinde ASP.NET vNext için HelloWeb örneğinin değiştirilmiş bir sürümünü çalıştırmak çalışıyorum . Bunun çok fazla kanama olduğunu anlıyorum , ancak ASP.NET ekibinin en azından mümkün olan en basit web uygulamasını çalışmaya devam etmesini umuyorum :)

Çevre:

  • Linux (Ubuntu, hemen hemen)
  • Siyah Beyaz 3.12.1
  • DNX 1.0.0-beta4-11257 (Bende 11249 tane var)

"Web uygulaması" kodu, içinde Startup.cs:

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

Proje yapılandırması, içinde 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 çalışıyor gibi görünüyor.

Ancak koşmaya çalıştığımda Microsoft.Framework.Runtime.IApplicationEnvironmentbunun bulunamayacağını gösteren bir istisna alıyorum . Komut satırı ve hata (biraz yeniden biçimlendirilmiş)

.../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ı, en acil ihtiyacım bunu düzeltmek olsa da, neyin yanlış gittiğini teşhis etmek için nasıl hareket edileceğine dair tavsiyeleri de takdir ediyorum, böylece gelecekte benzer sorunları kendim çözebilirim. (Bu aynı zamanda bu soruyu başkaları için de daha yararlı hale getirecektir.)

Bulduğum Microsoft.Framework.Runtime.IApplicationEnvironmentiçinde Microsoft.Framework.Runtime.Interfacesmontaj kaynağı ve bu son zamanlarda değişmiş gibi görünmüyor. İstisnanın adı neden başka bir derleme içindeki bir arabirimden ziyade kendi içinde bütün bir derleme gibi gösterdiği açık değildir. Sanırım bu montaj nötr arayüzlerden kaynaklanıyor olabilir , ancak hatadan net değil. ( [AssemblyNeutral]öldü, bu yüzden değil ... )


meraktan, montaj nötr arayüzler bağlantısı için github.com/aspnet/Home/wiki/Assembly-Neutral-Interfaces bağlantısını mı demek istediniz ? Şu anda bozuk olduğu için
cgijbels

@cgijbels: Teşekkürler - Aslında davidfowl.com/assembly-neutral-interfaces ile bağlantı kurmak istedim ama bağlantınız muhtemelen daha iyi ...
Jon Skeet

@JonSkeet montaj nötr arayüzleri artık yok.
tugberk

@tugberk: Gerçekten mi? Bu ilginç - bir düzenlemeye ekleyebileceğim bir bağ var mı?
Jon Skeet

Yanıtlar:


144

İyi soru. Özel sorununuz için, çözülmüş bağımlılıklarınızda bir uyumsuzluğunuz var gibi görünüyor. Böyle bir şey olduğunda, muhtemelen uygulamanızı uyumsuz bir dnx üzerinde çalıştırdığınız için. Hala çok büyük kırılma değişiklikleri yapıyoruz, bu yüzden eğer türün eksik olduğunu görürseniz, muhtemelen betaXpaketleri çalıştırırsınız ve betaYdnx ya da tam tersi.

Daha spesifik olarak, Montaj Nötr Arabirimleri beta4'te kaldırıldı, ancak çalıştırdığınız uygulama hala onları kullanıyor gibi görünüyor.

Hata mesajlarını daha net hale getirmek için paketlerin çalışması gereken minimum dnx'i işaretleyebilmesi için bunu yapmayı planlıyoruz. Ayrıca zaman geçtikçe, kırılma değişiklikleri ölecektir.

Genel olarak, dnx kullanırken (mevcut .NET'ten oldukça farklı olduğu için) böyle sorunları nasıl teşhis edeceğime dair bir rehber yazmanın zamanı geldiğini hissediyorum.

Koyduğunuz bağımlılıklar project.jsonyalnızca üst düzeydir. Sürümler de her zaman minimumdur (tıpkı bir NuGet paketi gibi). Bu, belirttiğinizde Foo 1.0.0-beta4gerçekten belirlediğiniz anlamına gelir Foo >= 1.0.0-beta4. Bu MVC 0.0.1, yapılandırılmış özet akışınız için sorarsanız ve minimum sürümler ise MVC 3.0.0, bunu alırsınız demektir. Ayrıca ASLA bunu belirtmek sürece versiyonunu yüzer. 1.0.0 için sorarsanız ve mevcutsa, daha yeni sürümler olsa bile 1.0.0 alırsınız. Boş sürümleri belirtmek HER ZAMAN kötüdür ve sonraki sürümlerde izin verilmeyecektir.

Kayan sürümler olarak adlandırılan nuget'e tanıttığımız yeni bir özellik var. Bugün sadece yayın öncesi etiketinde çalışıyor, ancak bir sonraki sürümde sürümün daha fazla bölümünde çalışacak. Bu, paket belirtim dosyasındaki sürüm aralıklarını belirtmek için npm ve gem sözdizimine benzer.

1.0.0-*- Bana önekle eşleşen en YÜKSEK sürümü verin ( anlamsal sürümleme kurallarına göre) ) VEYA bu önekle eşleşen bir sürüm yoksa, normal davranışı kullan ve bana EN DÜŞÜK sürümü> = belirtilen sürümü al.

En son sürümlerde geri yüklemeyi çalıştırdığınızda, adlı bir dosya yazacaktır project.lock.json. Bu dosya, içinde tanımlanan tüm hedef çerçeveler için bağımlılıkların geçişli kapanışına sahip olacakproject.json .

Böyle bir şey başarısız olduğunda aşağıdakileri yapabilirsiniz:

Kullanarak çözülmüş bağımlılıklara bir göz atın kpm list. Bu, projeniz tarafından başvurulan paketlerin çözümlenmiş sürümlerini ve hangi bağımlılığın onu çektiğini gösterecektir. Örneğin, A -> B ise, şunu gösterir:

bir
  -> B
B
 ->

Gerçek KPM listesi çıktısı:

ClassLibrary39 için listeleme bağımlılıkları (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

* doğrudan bağımlılık anlamına gelir.

Çalışan bir görsel stüdyosunuz varsa (şu anda DNX ile kırılıyor), referans düğümüne bakabilirsiniz. Görsel olarak temsil edilen aynı verilere sahiptir:

Referanslar düğümü

Bir bağımlılık hatasının nasıl göründüğüne bakalım:

İş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.0mevcut değil. Yani kpm geri yükleme aşağıdakileri gösterir:

resim açıklamasını buraya girin

Geri yükleme işleminin ne zaman başarısız olabileceğini teşhis ederken, yapılan HTTP isteklerine bakın, kpm'in hangi yapılandırılmış paket kaynaklarına baktığını söylerler. Yukarıdaki resimde bir uyarı var. CACHE istek var. Bu, kaynak türüne (nupkg veya nuspec) dayalı yerleşik önbellektir ve yapılandırılabilir bir TTL'ye sahiptir (bakın kpm restore --help). kpmUzak NuGet kaynaklarını vurmaya zorlamak istiyorsanız , --no-cachebayrağı kullanın :

KPM geri yükleme - no-cache

Bu hatalar ayrıca paket yöneticisi günlük çıktı penceresindeki Visual Studio'da da gösterilir:

resim açıklamasını buraya girin

Kenar notu!

Paket Kaynakları

NuGet.config'in şu anda nasıl çalıştığını açıklayacağım (gelecekte değişecek). Varsayılan olarak, global olarak yapılandırılmış varsayılan NuGet.org kaynağına sahip bir NuGet.config dosyanız vardır.%appdata%\NuGet\NuGet.Config . Bu global kaynakları görsel stüdyoda veya NuGet komut satırı aracıyla yönetebilirsiniz. Arızaları teşhis etmeye çalışırken her zaman etkili kaynaklarınıza (kpm çıktısında listelenenler) bakmalısınız.

NuGet.config hakkında daha fazla bilgiyi buradan edinebilirsiniz

Gerçekliğe dönüş:

Bağımlılıklar çözülmediğinde, uygulamayı çalıştırmak size bunu 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ı temel olarak, çalıştırma girişiminden önce tüm bağımlılık grafiğinin çözümlendiğini doğrulamaya çalışır. Koşmayı önerirsekpm restore , listelenen bağımlılıkları bulamadığı için.

Bu hatayı almanızın bir başka nedeni, yanlış dnx lezzetini çalıştırmanızdır. Uygulamanız yalnızca dnx451 belirtirse ve CoreCLR dnx'i çalıştırmayı denerseniz, benzer bir sorun görebilirsiniz. Hata mesajındaki hedef çerçeveye dikkat edin:

Koşu için:

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

Çalıştırmak çalışırken aşağıdaki konularda tanımlanan hedef çerçevesine clr o zihinsel eşleme hatırlamalıyız project.json.

Bu, Visual Studio'da başvuru düğümü altında da görünür: Çözümlenmemiş bağımlılıklar

Sarı olarak işaretlenen düğümler çözülmez.

Bunlar ayrıca hata listesinde de gösterilir:

Çözümlenmemiş bağımlılıklar listesi

bina

Bu hatalar ayrıca inşa ederken de ortaya çıkar. Komut satırından oluştururken, çıktı çok ayrıntılıdır ve sorunları teşhis ederken 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

Çıktı, paketlerden ve proje referanslarından derleyiciye aktarılan tüm montajları gösterir. Derleme hataları almaya başladığınızda, kullandığınız paketin o hedef platformda gerçekten çalıştığından emin olmak için buraya bakmak yararlı olacaktır.

İşte dnxcore50'de çalışmayan bir paket örneği:

{
    "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 sürüm 3.0.0'ın dnxcore50 üzerinde çalışan derlemesi yoktur (sıkıştırılmamış paketin lib klasörüne bakın). Koştuğumuzda kpm build:

Dnxcore50'de eksik montajlar

"Paketi Microsoft.Owin.Host.SystemWeb kullanma" diyor ancak "Dosya:" yoktur. İnşa başarısızlığının nedeni bu olabilir.

İşte beyin dökümü bitiyor


Dnx neden bir bağımlılığı çözemez belirlemek için önermek, dnu listesini kullanmaya çalışıyorum. Ama kırmızı bir "project.json bulunamadı" alıyorum. Montaj, "Yapımda çıktı üret" işaretlenerek oluşturulan yapay nesneler klasöründe bulunur. Nasıl devam edeceğiniz konusunda herhangi bir öneriniz var mı?
Mike Scott

Eserler klasörünün herhangi bir şeyle ne ilgisi var? Project.json içindeki bağımlılığa başvurdunuz mu? Referansta bulunduğunuz paket yapılandırılmış bir feed'de mevcut mu?
davidfowl

17

Hala bilmiyorum tamamen neyin yanlış olduğunu, ama şimdi en azından daha kolay şeyler denemek yapmak en için bir dizi adım vardır:

  • Şüphe duyduğunuzda, dnx'i yeniden yükleyin
    • Paket önbelleğini havaya uçurmak yardımcı olabilir
  • Kontrol ~/.config/NuGet.configDoğru Nuget Yayınları kullanma emin olmak için

Çeşitli seçenekler makul temiz bir şekilde test etmek için aşağıdaki komut satırı kullanarak sona erdi:

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

Görünüşe göre benim sorunum aslında bağımlılıkların yanlış sürümlerinin yüklü olmasıydı. "1.0.0-beta4"Görünüşe göre sürüm numarası oldukça farklı "1.0.0-beta4-*". Örneğin, Kestrelbağımlılık sürüm 1.0.0-beta4-11185 olarak yalnızca belirtildiğinde yüklendi 1.0.0-beta4, ancak sürüm 1.0.0-beta4-11262 -*sonunda. beta4Yanlışlıkla bir beta3 derlemesini kullanmaktan kaçınmak için açıkça belirtmek istedim

Aşağıdaki proje yapılandırması iyi çalışır:

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

6
Bunun nedeni, -*her zaman size en son yayın öncesi sürümünü verirken, onsuz tüm bağımlılıkları karşılayan en düşük sürümü alırsınız (NuGet ile her zamanki gibi). Bu testin birkaç örneği var.
Alexander Köplinger

2
@ AlexanderKöplinger: Teşekkürler, bu mantıklı. Yani ... beta4 en erken beta4, ... beta4- * en son beta4, değil mi?
Jon Skeet

4
"frameworks": {"dnx451": {}}benim için sabit olsaydı, gerek yokdnxcore50
vicentedealencar

İlk komutun da beta5 sürümünde takılı kalmamı sağladı. Çalışmayı denedim dnvm upgrade-self, bu en son sürüme yükseltilmez. VS komut istemini admin olarak çalıştırmak dnvm sürümünü as olarak gösterdi rc1..., ancak yönetici olarak değil beta5.... Komutunuzdan sonra hem admin hem de admin olmayan komut istemleri rc2...(en son) sürüm olarak gösterilir.
JabberwockyDecompiler

Mono ve seçim olup olmadığını merak kullananlar için dnx451ya dnxcore50: Bu yanıt bana biraz daha bu konuyu anlamamıza yardımcı stackoverflow.com/a/30846048/89590 Kısa cevap: dnx451mono için uygundur.
Nate Cook

8

Sen adında bir env Var ayarlayabilirsiniz DNX_TRACEiçin 1bir TON daha Teşhis bilgilerini görmek için. Dikkatli olun, çok daha fazla bilgi!


@JonSkeet BTW diğer yanıtlar (kendi yanıtınız dahil), karşılaştığınız belirli sorunu tanılama ve onarma hakkında harika bilgiler içerir. Bu cevabı süper kısa tuttum, çünkü sorunun neden ilk başta olduğuna dair daha fazla ipucuna yol açabilecek başka bir farklı cevap.
Eilon

Kesinlikle - Bunu takdir ediyorum :)
Jon Skeet

3

Işe almak için benim değiştirdi project.json.. şimdi gibi görünüyor:

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

Anahtar, çerçeveler bölümü gibi görünüyordu.

Ayrıca yeniden adlandırma k web, şimdi dnx . webveyadnx . kestrel

Güncelleme - biraz daha fazla bilgi

Garip bir şekilde, tanımlanmış hiçbir çerçeve ile çalıştırdıktan sonra gitti ve ben bir sürü ekstra şeyler var 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

.. sonra iyi çalıştı. Sonra çerçeve bölümüne geri döndüm

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

.. ve hala çalıştı, oysa daha önce bir hata fırlattı!

Çok tuhaf!

(Koşuyorum 1.0.0-beta4-11257)

Daha fazla güncelleme

Yeni bir Ubuntu örneğini açtım ve seninle aynı hatayı aldım ... Düşüncem, sorunun sadece paketleri almaya çalışmaktan kaynaklanabileceğiydi ( nuget.orgdeğil myget.org, daha yeni şeylere sahip) NuGet.Config. projenin kökü ..

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

.. bu doğru sürümleri (diğerinden sonra kpm restore) alarak benim için düzeltilmiş gibi görünüyor .


1
Re "dnx. Kestrel" bölümü - gerçekten, bu yüzden gösterdiğim komut :) Bu yapılandırma ile farklı bir hata alıyorum: System.TypeLoadException: 'Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions' türü 'Microsoft' derlemesinden yüklenemedi. Framework.Logging, Sürüm = 1.0.0.0, Kültür = nötr, PublicKeyToken = null '. Hangi DNX sürümünü kullanıyorsunuz?
Jon Skeet

1
"Dnx. Web" i ilk aldığımda: `` System.InvalidOperationException: Hedef çerçeve 'DNX, Sürüm = v4.5.1' için aşağıdaki bağımlılıklar çözülemedi ve eksik olan şeylerin bir listesini önerdi.
Stephen Pope

İlginç. Bu hangi platformda, btw?
Jon Skeet

DNX'i yükselttikten sonra ortam değişkenlerini yeniden yüklemek için 'kaynak ~ / .bashrc' yaptınız mı? Ayrıca "dnvm yükseltme" + "dnvm varsayılan kullanın" yapmak zorunda
Stephen Pope

DNX, .bashrc tarafından güncellenmemişti ... muhtemelen dün manuel olarak oluşturduğum için. Bunun yerine güncellenen talimatları kullanmayı deneyeceğim ...
Jon Skeet

2

Bugünlerde tüm package.jsonsürümlerim bitiyor"-rc2-*"

(Şimdiye kadar gördüğüm istisnalar Microsoft.Framework.Configuration, "1.0.0-rc1-*"veya olması gereken paketlerdir "1.0.0-*")

@Davidfowl'in bahsettiği "sürüm trenleri" ile ilgili olarak, beta8 ve rc2 arasında çok fazla acı kayboldu.

dnvm upgrade -u -arch x64 -r coreclr

coreclrBu 2 NuGet beslemesinde en çok şansım oldu :

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

Ne zaman yapmak paket sorunlarını eksik olması, bu aynı suçluları var zamanın% 90:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Çoğu zaman, ana NuGet.org akışını zorlayarak bunları aşabilirim:

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

İşte benim çalışma config.json:

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

Yukarıdaki liste config.json'dan ziyade project.json'dan değil, ancak listede daha önce bilmediğim yararlı bağımlılıklar sağladığından hala kaldırıldım.
Ron C

1

Bağımlılık eksik sorunları da dnxcore50 ve dnx451 referansları yatıştırmaya çalışırken yaşıyordu.

Bu hakkı anlıyorsam "bağımlılıklar": {}, çerçeveler arasında paylaşılır.

Ardından, "çerçeveler" içindeki "bağımlılıklar": {} bu çerçeveye özgüdür.

dnxcore50 modüler bir çalışma zamanıdır (kendi kendine yeten), bu nedenle temelde, başka bir yere dağılmış çekirdek bağımlılıklarınız olan klasik .net çerçevesinden farklı bir program çalıştırmak için gereken tüm çekirdek çalışma zamanlarını içerir.

Bu nedenle, en azından yaklaşıma bağlı kalmak istediğimi söylediğimde, bir noktada mac veya linux'da yer almaya karar verdim.

Güncelleme cshtml görünümleriyle garip bağımlılık sorunları yaşadı, şimdilik dnx451 ile gitti.

Bu benim projem. 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"
  ]
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.