Dosya veya montaj veya bağımlılıklarından biri yüklenemedi


238

Bu "dosya veya montaj veya bağımlılıklarından biri yüklenemedi" sorun başka bir yaşıyorum.

Ek bilgiler: Dosya veya derleme 'Microsoft.Practices.Unity, Sürüm = 1.2.0.0, Kültür = nötr, PublicKeyToken = 31bf3856ad364e35' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040)

Buna neyin sebep olduğunu veya sebebi bulmak için nasıl hata ayıklayabileceğimi bilmiyorum.

Çözüm kataloglarım .csproj dosyalarımda bir arama yaptım ve sahip olduğum her yerde:

Başvuru Dahil Et = "Microsoft.Practices.Unity, Sürüm = 2.0.414.0, Kültür = nötr, PublicKeyToken = 31bf3856ad364e35, işlemciArchitecture = MSIL"

Herhangi bir projemde 1.2.0.0'a karşılık gelen hiçbir referans bulunamadı.

Bunu nasıl çözeceğime dair bir fikrim var mı?

Ayrıca genel olarak böyle sorunların nasıl ayıklanacağına dair ipuçlarını da takdir ediyorum.


1
Referans verdiğiniz derlemelerden herhangi biri eski Unitykütüphanede bazı şeyler kullanıyor olabilir mi?
decyclone

3
Muhtemelen ... ama hangi montajları nasıl bulabilirim?
Çözümümde

3
Derleme başvurusu değil, sürüm 2.0'a başvuruyorsunuz. Ancak çalışma zamanında CLR, eski bir sürüm olan 1.2'yi buluyor. Derleme dizininizde bu eski DLL dosyasını görmüyorsanız, CLR'nin bu eski kopyayı nasıl bulduğunu öğrenmek için Fuslogvw.exe'yi kullanın.
Hans Passant

2
Projenizin bin klasörüne bakın ve projenizin dll'sinin adında bir çakışma olup olmadığını görün. Bunu silin ve ardından çözümünüzü yeniden oluşturun. Bu benim için çalıştı.
coggicc

11
"ya da bağımlılıklarından biri" beni gerçekten rahatsız eden kısım. "Bağımlılıklarından birini" yükleyemezse, hata hangi "bağımlılıklarından birinin" yüklenemeyeceğini söylemelidir. Mevcut form işe yaramaz, bir şey yükleyemeyeceği de söylenebilir
Paul McCarthy

Yanıtlar:


116
  1. Bir birlikteliğe başvurup başvurmadığınızı kontrol edin; bu da birliğin eski bir versiyonuna referansta bulunur. Örneğin ServiceLocator.dll, Unity derlemesinin eski bir sürümüne ihtiyaç duyan bir derlemeniz olduğunu varsayalım, şimdi başvurduğunuzda, ServiceLocatorUnity'nin eski sürümünü sağlamalısınız ve bu da sorunu yaratıyor.

  2. Tüm projelerin montajlarını oluşturduğu çıktı klasörü olabilir, birlik eski bir sürümüne sahiptir.

Eski montajları kimlerin yüklediğini bulmak için FusLogVw'yi kullanabilirsiniz , sadece günlük için bir yol tanımlayın ve çözümünüzü çalıştırın, ardından Unity montajının yüklendiği ilk satırı kontrol edin (FusLogvw'da), çift tıklayın ve çağrıyı görün ve işte başlıyoruz.


6
FuseLogVw
Stiger

1
Günlük dosyasını bulmak zorunda kalmamak için özel bir günlük yolu belirtebilirsiniz: Ayarlar, Özel günlük yolunu etkinleştir onay kutusunu işaretleyin, özel bir günlük yolu girin, yenileyin.
RedGreenCode

82

IIS Yöneticisi'ni açın

Uygulama Havuzları Seçin

sonra kullandığınız havuzu seçin

gelişmiş ayarlara git (sağ tarafta)

32-bit uygulamayı etkinleştir seçeneğinin bayrağını true olarak değiştirin.


IIS -> her bir ApplicationPool'u seçin -> Temel Ayarlar -> ".NET Framework sürümü" açılır menüsünde en son çerçevenin seçilip seçilmediğini kontrol edin
Martin

Ayrıca VS'de projenizi sağ tıklayabilirsiniz. ve tercih edilen 32 bit onay işaretini kaldırın
eran otzap

Teşekkürler. İşe yaradı. Benim durumumda zaten doğruydu, sadece denemek için. Yanlış yaptım ve işe yaradı.
meekash55

Bir projeyi 1 sunucudan diğerine birleştirdiğimde, bu bayrak gerçekten yine yanlıştı, çözüm için teşekkürler!
Appsum Solutions

69

Benim için diğer çözümlerin hiçbiri işe yaramadı (temizleme / yeniden oluşturma stratejisi dahil). Visual Studio'yu kapatmak ve yeniden açmak için başka bir geçici çözüm buldum .

Sanırım bu, Visual Studio'yu çözümü ve tüm projeleri yeniden yüklemeye zorlar, süreçteki bağımlılıkları yeniden kontrol eder.


33
Bunun işe yarayacağına inanmıyorsanız, en azından deneyin. Yapana kadar kendime inanamadım.
Ben Cull

3
😍😍😍😍😍😍😍😍😍😍😍 Worked for me
Devidas M Das

48

Çözümünüzdeki Hata Ayıkla ve Bırak klasörlerini temizlemeye çalışın. Sonra tekrar birlik ekleyin ve ekleyin.


3
Bu sorun birçok şeyden kaynaklanabilir ... çözümünüz sorunlarımı çözdü ve başkalarının da çözmesine neden olabilir.
Scott Rippey

1
@ScottRippey Bu benim için çalıştı. Önce tüm .pdb dosyalarını sildim ve sonra projemi yeniden yükleyip yeniden oluşturdum.
botenvouwer

21

% 99'da Dosya veya montaj yüklenemedi veya bağımlılık sorunlarından biri bağımlılıklardan kaynaklanıyor! Bu adımları izlemenizi öneririm:

  1. İndir Bağımlılık Walker dan http://www.dependencywalker.com/

  2. Dependency Walker'ı başlatın ve dll'yi açın (benim durumumda NativeInterfaces.dll)

  3. Kırmızı Hata dosyasında hata ile bir veya daha fazla dll görebilirsiniz ...

  4. Bu dll sisteminizde eksik olduğu anlamına gelir; benim durumumda dll adıMSVCR71.DLL

  5. Google'dan misss dll dosyasını indirebilir ve doğru yolda kopyalayabilirsiniz (benim durumumda c:\windows\system32)

  6. Bu noktada, yeni dll GAC (Global Assembly Cache) kaydetmek gerekir: bir DOS terminali açın ve şunu yazın:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
  7. Uygulamanızı yeniden başlatın!


22
Bağımlılık yürüteç harika, ama rastgele DLL'leri internetten Windows'a kopyalamak ... daha az harika. Bu dlls sağlayan yükleyici bulmaya çalışmak daha iyidir.
RJFalconer

Birkaç dosya ( API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL) bulunamadı ve bu stackoverflow soruya yol açtı . Temelde bazı dosyalar için yanlış pozitif bakıyor olabilir unutmayın, bağlantı daha fazla ayrıntı sağlar.
cheriejw

16

Microsoft Enterprise Library (.NetTiers tarafından başvurulan) bizim sorunumuzdu ve bu da Unity'nin eski bir sürümüne atıfta bulundu. Sorunu çözmek için web.config dosyasında aşağıdaki bağlama yönlendirmesini kullandık:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Alternatif olarak, Enterprise Library'yi en son sürüme güncellemek isteyebilirsiniz.


16

Aşağıdaki benim için çalıştı.

  • Geçici Dosyaları Kaldır C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Dosyaları
  • VSTS'yi kapatın ve tekrar açın
  • Aynı DLL'leri kaldırın ve ekleyin (Not: aynı eşleşen sürümleri eklersiniz)

15

Projenizdeki Web.config / App.config dosyasını kontrol edin. Sürüm numaralarının doğru olup olmadığına bakın.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />

Bu benim için çalıştı.



15

Orijinal sorunun beş yıl önce gönderilmesine rağmen, sorun hala devam ediyor ve oldukça can sıkıcı.

Genel çözüm, neyin yanlış gittiğini anlamak için referans alınan tüm montajların kapsamlı bir analizidir. Bu görevi kolaylaştırmak için, çakışan veya eksik referansları vurgularken, başvurulan tüm derlemelerin grafiğini almak için bir .NET derlemesi (a .dllveya .exedosya) seçmeyi sağlayan bir araç (Visual Studio uzantısı) yaptım .

Araç, Visual Studio Gallery'de bulunmaktadır: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

Çıktı örneği: resim açıklamasını buraya girin


Visual Studio'nun Topluluk sürümleriyle çalışmaz
Draex_

Visual Studio sürümü ile ilgili olmayan başka bir sorun olması gerektiğine inanıyorum. Uzantıyı VS 2017 ve VS 2015 Community sürümlerinde test ettim. Aslında VS 2017 Topluluk baskısı ile geliştirildi.
marss19

Aha. Yüklü başka uzantılarınız var mı? Bu sayfa, DGML'nin VS Topluluğu'nda desteklenmediğini söylüyor: msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport
Draex_

1
Topluluk sürümünde mimari araç yoktur, ancak DGML düzenleyicisinin kendisi de mevcuttur. Visual Studio Installer üzerinden "DGML düzenleyicisini yükle" -> "Kod Araçları" altında "DGML düzenleyicisini yükle" seçeneğini belirleyerek yükleyebilirsiniz -> Değiştir
marss19 16:17

11

ekran görüntüsüÇözüm gezgini proje (çözüm değil) sağ tıklayın, yapı sekmesinde Platform hedefi: "Herhangi bir CPU" seçin.


Uygulama havuzunu kontrol ettikten sonra, "32 Bit Uygulamaları Etkinleştir" Yanlış olarak ayarlandı, ancak platform hedefim x86 idi. Herhangi bir CPU VEYA x64 olarak değiştirmek sorunumu çözdü.
Keith Ketterer

11

Juntos cevabı doğru ama şunu da göz önünde bulundurmalısınız:

V2.1.505.2 birliği için farklı AssemblyVersion ve AssemblyFileVersion öznitelikleri belirtilir:

resim açıklamasını buraya girin

AssemblyFileVersion NuGet tarafından kullanılır, ancak CLR bununla ilgilenmez! CLR yalnızca AssemblyVersion'ı kullanacak !

Bu yüzden yönlendirmeleriniz AssemblyVersion özniteliğinde belirtilen bir sürüme uygulanmalıdır . Yani 2.1.505.0 kullanılmalıdır

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

Ayrıca bkz: AssemblyVersion, AssemblyFileVersion ve AssemblyInformationalVersion arasındaki farklar nelerdir?


6

Ayrıca bu korkunç hatayı aldım ve bunun için bir çözüm buldum ...

  1. Çözüm adına sağ tıklayın
  2. Çözümü Temizle'ye tıklayın
  3. Visual Studio'yu yeniden başlat
  4. Proje Özelliklerine Git >> Yap
  5. Değişim Yapılandırma için Release
  6. Hata Ayıklamayı Başlat (F5)

1), 2)

Çözüm adına sağ tıklayın

4), 5)

Konfigürasyonu Serbest Bırakacak Şekilde Değiştir

Umarım bu da size yardımcı olur.


5
  • Git: Çözüm -> Paket
  • Gelişmiş Sekmesini tıklayın (Sayfanın altında bul)
  • Senin ekleyin dll ek meclislere (bu şekilde biz sharepoint dış DLL ekleyebilirsiniz).

7
VS2010 projemde "Çözüm -> Paket" yok
Muflix

5

Bunun yardımcı olup olmayacağından emin değilim.

Montajlarınızdaki Properies içindeki Montaj adının ve Varsayılan ad alanının eşleşip eşleşmediğini kontrol edin. Bu, aynı hatayı veren sorunumu çözdü.


Mükemmel! Benim dll dosya adı ve ad alanı farklıydı, ben ad alanını kopyaladı ve benim dll yeniden adlandırdı.
Anynomous Khan

5

Bin klasöründe benim durumumda Unity.MVC3 adlı bir referans olmayan dll oldu, ben görsel stüdyo bu başarı ile herhangi bir referans aramak için çalıştı, bu yüzden benim çözüm bin klasöründen bu dll silmek kadar kolay oldu.


4

Teşekkürler Riddhi M.Aşağıdaki benim için çalıştı.

Geçici Dosyaları Kaldır C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Geçici ASP.NET Dosyaları VSTS'yi Kapatın ve Tekrar Açın Aynı DLL'leri Kaldırıp Ekleme (Not: aynı eşleşen sürümleri eklersiniz)


Bu kadar uzun zaman geçirdim ve bunun cevabı olduğuna inanamıyorum. VS içinde tuhaf davranışlar gördüğünüzde genellikle iyi bir çözümdür. Teşekkür ederim.
Bonez024

3

Çözümünüzde çok fazla projeniz olduğunu söylüyorsunuz ... iyi, inşa sırasının üst kısmına yakın bir projeyle başlayın. Bunu inşa edin ve anladıktan sonra, aynı düzeltmeyi geri kalanına uygulayabilirsiniz.

Dürüst olmak gerekirse, muhtemelen referansınızı yenilemeniz gerekir. Sürümünüzü güncellediğiniz ve referansları güncellemediğiniz anlaşılıyor veya çözümünüzü kaynak kontrolünde tutmanız göreceli bir yol sorunu. Sadece varsayımlarınızı doğrulayın ve referansı tekrar ekleyin.


3

Aşağıdaki benim için çalıştı.

  • Geçici Dosyaları Kaldır C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Dosyaları
    • ardından Geçici Asp.net Dosyaları> özellikleri> güvenliğine sağ tıklayın ve IIS'ye ve projemi çalıştıran tüm kullanıcıya tam kontrol erişimi verin


3

Ben aşağıdaki sorunu kullanarak çözdüm aynı sorunu vardı:

  1. araçlar menüsünü aç ve seçeneği seç
  2. seçeneklerinde, pencere Projeler ve Çözümler / Web Projeleri'ne gidin
  3. Kontrol use the 64bit version of IIS ...

resim açıklamasını buraya girin


2

Appname.dll dosyanızı çıktı klasörünüzden silmeniz gerekir. Debug ve Release klasörlerini temizleme. Yeniden oluşturun ve çıktı klasör yeniden oluşturulan dll dosyasına kopyalayın.


2

Ben "Başlangıç proje olarak ayarla" boş / hergün kütüphane / proje.

Sonra konuşlandırdı.

İşe yaradı!

İlk derlemede değildi çünkü .dll bulunamadı düşünüyorum.


2

Başka bir olası neden: kazara her iki projeye de proje özelliklerinde aynı montaj adını vermediğinizden emin olun.


Bu benim anlamaya saatler sürdü .... Ben yanlışlıkla birim test projesini ana proje ile aynı adlı adlandırdı, bu yüzden birim test projesi dll proje dll üzerine
yazmış

2

Enterprise Library 5 kullanan .NET 4.0 için çözümüm, aşağıdakilere başvuru eklemekti:

Microsoft.Practices.Unity.Interception.dll


2

Çakışan referanslara dikkat edin. Bir temizleme ve yeniden oluşturma işleminden sonra bile, çakışan başvurular yine de soruna neden olacaktır. Benim sorunum AForge ve Accord arasındaydı. Her iki referansı da kaldırdım ve belirli referansı yeniden seçerek referansları yeniden ekledim (özellikle benim durumum için, sadece Accord).


2

Benim için Unity C # Proects olmadan birlik oyununu yeniden inşa etmek Checkmark çalıştı.


2

Benim durumumda, önerilen cevapların hiçbiri işe yaramadı.

İşte benim için işe yarayan:

  1. Referansı kaldır
  2. DLL dosyasını yeniden adlandırma
  3. Referansı tekrar içe aktarın

İkinci adım, onsuz çalışmadığı için önemliydi.


2

Başvuru için "Yerel Olarak Kopyala" özelliğinin true olarak ve belirli sürümün true olarak ayarlanıp ayarlanmadığını kontrol etmeyi deneyin. Bu, Visual Studio'daki uygulamalar için geçerlidir.


2

Bugün bunu yaptım ve benim durumumda sorun çok garipti:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
  </dependentAssembly>0.

XML'in sonundaki başıboş karakterlere dikkat edin - bunlar bir şekilde sürüm numarasından bu XML bloğunun sonuna taşındı!

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
  </dependentAssembly>

Yukarıda ve voila değiştirildi! Her şey tekrar çalıştı.


1

Windows xp üzerinde bir uygulama açarak bu hata mesajını alıyorsanız, ilk önce net framework 4 ve service pack 3 olmadan çalışmaması nedeniyle bu uygulamayı yüklediğiniz anlamına gelir. her ikisini de yüklediyseniz ve tekrar bu hatayı alıyorsunuz, bu uygulamayı tekrar yüklemelisiniz, ancak önce ekleme ve kaldırma işlemlerinden kaldırın

Bu işe yaramazsa lütfen beni kötüye kullanmayın. ben de bir gencim

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.