Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor


751

C # Windows Forms uygulamasında (Visual Studio 2005) bazı birim sınamalarını çalıştırmaya çalışıyorum ve aşağıdaki hatayı alıyorum:

System.IO.FileLoadException: Dosya veya derleme 'Yardımcı Programı, Sürüm = 1.2.0.200, Kültür = nötr, PublicKeyToken = 764d581291d764f7' 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) **

x.Foo.FooGO () adresinde

.cs'deki x.Foo.Foo2 (String groupName_) konumunda: satır 123

x.Foo.UnitTests.FooTests.TestFoo () 'da FooTests.cs: satır 98 **

System.IO.FileLoadException: Dosya veya derleme 'Yardımcı Programı, Sürüm = 1.2.0.203, Kültür = nötr, PublicKeyToken = 764d581291d764f7' 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)

Referanslarıma bakıyorum ve sadece bir referansım var Utility version 1.2.0.203(diğeri eski).

Herhangi bir öneri nasıl bu DLL dosyasının bu eski sürümüne başvurmaya çalıştığını anlamaya nasıl?

Üstelik, sabit diskimde bu eski montajın bile olduğunu sanmıyorum. Bu eski sürüm derlemeyi aramak için herhangi bir araç var mı?


Benim durumumda, bu farklı DLL sürümleri aynı DLL yükleyen iki proje vardı çünkü oldu. (Bu birine yardım umut!)
miguelmpn

Yanıtlar:


461

.NET Assembly yükleyicisi:

  • 1.2.0.203 bulunamıyor
  • ancak bir 1.2.0.200 buldu

Bu derleme istenenle eşleşmiyor ve bu nedenle bu hatayı alıyorsunuz.

Basit bir ifadeyle, başvurulan derlemeyi bulamıyor. GAC'ye veya uygulama yoluna koyarak doğru montajı bulabildiğinden emin olun. Ayrıca bkz. Https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference .


19
ama projenin referanslarına baktığımda 1.2.0.203'e işaret ediyor ... artık hiçbir şey 1.2.0.200'e işaret etmiyor gibi görünüyor
leora

128
Tam olarak - 1.2.0.203 arıyor , ancak 1.2.0.200 bulundu . Dosyanın nerede olduğunu bulun ve doğru sürümle değiştirin.
Jon Skeet

18
Burada benzer bir soru sordum ve çalışan bir çözüm buldum: stackoverflow.com/questions/4187907/…
Michael La Voie

13
Referanslar sürümünü kontrol edin ve daha sonra aynı olup olmadığına bakın Packages.config ve Web.config
zdarsky.peter

4
Bu mesaj beni her zaman karıştırıyor. Geriye doğru yazılmış gibi görünüyor. Yüklemesini istediğiniz sürümden şikayet etmesini bekledim, bulduğu sürümden değil. Sevgili yanlış anlayan tek kişi ben değilim!
Greg Woods

91

Bu sorunu gidermek için birkaç şey yapabilirsiniz. İlk olarak, sabit sürücünüzü montaj (.dll) için aramak için Windows dosya aramayı kullanın. Bir sonuç listeniz olduğunda, Görünüm-> Ayrıntıları Seç ... 'i yapın ve sonra "Dosya Sürümü" nü kontrol edin. Bu, sürüm listesinde sürüm numarasını görüntüler, böylece eski sürümün nereden gelebileceğini görebilirsiniz.

Ayrıca, Lars'ın dediği gibi, orada hangi sürümün listelendiğini görmek için GAC'nizi kontrol edin. Bu Microsoft makalesi , bir derleme sırasında GAC ​​içinde bulunan derlemelerin yerel olarak kopyalanmadığını belirtir, bu nedenle bir yeniden oluşturma işlemi yapmadan önce eski sürümü kaldırmanız gerekebilir. ( Bunu sizin için yapacak bir toplu iş dosyası oluşturma hakkında notlar için bu soruya verdiğim cevaba bakın )

Hala eski sürümün nereden geldiğini anlayamıyorsanız, bağlama hataları hakkında daha fazla bilgi almak için Visual Studio ile birlikte gelen fuslogvw.exe uygulamasını kullanabilirsiniz. Microsoft'un bu araç hakkında burada bilgileri vardır . HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogKayıt defteri anahtarını 1 olarak ayarlayarak günlüğe kaydetmeyi etkinleştirmeniz gerektiğini unutmayın .


19
Dosya Sürümünün derleme kimliğinin bir parçası olmadığını unutmayın. Derleme Sürümü, ancak Dosya Sürümü ile aynı olmak zorunda değildir!
Lars Truijens

Hizmetler için fuslogvw kullanıyorsanız blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx adresini ziyaret edin
Nick

Dosya adını aramak sorunumu çözdü. Geçici ASP.Net klasöründe dll eski bir sürümü vardı ve InstallShield güncel sürümü yerine bunu kullanıyordu! Temiz çözüm, yeniden inşa, PC'yi yeniden başlatmak hiçbir şey yapmadı. Yerel olarak iyi çalıştı ve her konuşlandırıldığında patladı.
JumpingJezza

İnşaattan hemen sonra sitem iyi çalışıyor, ancak kısa bir süre sonra bu sorun ortaya çıkıyor.
Shavais

Bunun yerine montaj sürümünü söylemek için bu cevabı düzenledim.
19:19

60

Bu problemi kendim hallettim ve konunun diğerlerinin karşılaştıklarından farklı bir şey olduğunu buldum.

Benim ana proje referans iki DLL vardı: CompanyClasses.dll ve CompanyControls.dll. Bir çalışma zamanı hatası alıyordum:

Dosya veya montaj 'CompanyClasses, Sürüm = 1.4.1.0, Kültür = nötr, PublicKeyToken = 045746ba8544160c' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor

Sorun, sistemimde 1.4.1 sürüm numarası ile CompanyClasses.dll dosya yoktu. GAC'da yok, uygulama klasörlerinde yok ... hiçbir yerde. Tüm sabit diskimi aradım. Sahip olduğum tüm CompanyClasses.dll dosyaları 1.4.2 idi.

Gerçek sorun, buldum, CompanyControls.dll CompanyClasses.dll sürüm 1.4.1 başvurdu oldu. Ben sadece CompanyControls.dll (CompanyClasses.dll 1.4.2 başvuru yaptıktan sonra) yeniden derlenmiş ve bu hata benim için gitti.


2
+1 DLL'lerimden biri Caliburn Micro'nun eski bir sürümüne başvurduğumda benzer bir şey oldu.
Jason Massey

bende deneyiminiz beni bakmam gereken yere yöneltti ve sorunumu çözdüm.
Esen

Başka bir seçenek CompanyControlsprojeyi açmak, CompanyClasses.dllreferansı sağ tıklayın -> özellikler ->SpecificVersion = false
BlueRaja - Danny Pflughoeft

bu genellikle xamarin uygulamalarında görülür. Xamarin.forms projem xamarin.droid projesinden farklıydı. Gönderinizi yeni gördüm ve tanıdım.
batmaci

CompanyClasses.dll imzalanırsa, SpecificVersion = falsetek başına kesmez. Bir ihtiyacınız olacak bindingredirect.
Denise Skidmore

53

Aşağıdaki tüm montaj sürümlerini 3.1.0.0 sürümüne yönlendirir. Bu başvuruyu her zaman App.config dosyasında güncelleyecek bir komut dosyamız var, bu nedenle bu sorunla bir daha asla ilgilenmemiz gerekmiyor.

Yansıtma sayesinde derleme publicKeyToken alabilir ve bu bloğu .dll dosyasının kendisinden oluşturabilirsiniz.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

XML ad alanı özniteliği (xmlns) olmadan bunun işe yaramayacağını unutmayın.


1
Bu benim için çalıştı. 'NewVersion = 3.3.3' değerini 'newVersion = 3.1.0' olarak değiştirdim
jward01

En iyisi olsa kaçınmak rotası aşağı gitmek değil. Bu böcek seni ısırmaya geldiğinde zor ısırır.
BanksySan

1
Benim sorunum, yönlendirmelerin var olmayan derlemelere işaret ediyor olmasıydı. App.Config, yüklediğim en son NuGet paketlerinden derleme bilgilerini tuttu. Bu paketleri daha sonra indirdiğimde, bunu temizlemedi. Bu, bir 4.7.2 çerçeve birim test projesi tarafından vurulan bir .NET standart sınıf kitaplığıydı. Birim test projesi sorunu zamanında sunuldu ..
D-Sect

@ D-Sect haklı. Kaynak denetiminiz web.config öğesinde değişiklik olduğunu gösteriyorsa (NuGets'inizle oynadığınız için) bu bağlayıcıRedirect'leri oradan yedeklemek akıllıca olabilir. NuGets'i düşürmek bağlayıcı yönlendirmeleri temizlemeyecek
bkwdesign

45

Visual Studio kullanıyorsanız, "temiz çözüm" deneyin ve sonra projenizi yeniden oluşturun.


14
Bu genellikle benim için bir çözümdür. Genellikle silme binve objyapma. Temel olarak, referansta bulunduğum bir şey hala aynı şartı karşılamaya çalışırken orada oturuyor. Örneğin, eski bir sürüm doğrudan başvurduğum bir şey ve yeni sürüm NuGet'te.
David Betz

TFS'den çektikten sonra birkaç DLL için bu sorunla karşılaştı. Bu çözüm benim için düzeltti.
Milo

3
Benim için çalıştı. Bin amd obj klasörünü sildi ve sorunu çözdü.
user1619480

Teşekkürler, benim için de çalıştı, sadece bin klasörünü sildi.
The Cookies Dog

Benim için binklasörü silmek yeterliydi . Şaşırtıcı bir şekilde, daha önce başarılı olmadan temiz bir çözüm denedim ve çözümü yeniden oluşturdum . Bazen biraz garip.
Aslan

36

Diğer cevaplar benim için işe yaramaz. Sürümü umursamıyorsanız ve uygulamanızın çalışmasını istiyorsanız referansı sağ tıklayın ve 'belirli sürümü' yanlış olarak ayarlayın ... Bu benim için çalıştı. resim açıklamasını buraya girin


8
Bu ayar yalnızca derleme zamanında geçerlidir . Derlendikten sonra, derlediğiniz tam olarak aynı montaj sürümüne ihtiyaç duyacaktır. Bkz. Stackoverflow.com/questions/24022134/…
Lars Truijens

22

Ben sadece bu sorunu koştu ve sorun benim uygulama hata ayıklama dizininde .dll eski bir kopyası vardı. Görüp görmediğinizi görmek için (GAC yerine) orayı da kontrol etmek isteyebilirsiniz.


Biz sadece yedek tutmak çünkü bu sorunu vardı farklı bir sunucuya geçirir. Yedek kopyalar silindikten sonra çalıştı. Thanks :)
Jtuck

22

Şimdi herkesin aklını uçuracağım. . .

Tüm <assemblyBinding>başvuruları .config dosyanızdan silin ve sonra bu komutu NuGet Package Manager konsolundan çalıştırın:

Get-Project -All | Add-BindingRedirect

Benim için de çalıştı. Teşekkürler
Oleh Udovytskyi

zamanımı kurtardın 👌👌
Abdu Imam

4
Bu yalnızca paket yönetimi biçimi Packages.config olduğunda işe yarar. 2017 csproj dosyasını Packages.config olmadan kullanıyorsanız, işe
yarar

1
Zihin resmen patladı
BGilman

güzel bir numara
hexagod

21

Bir NuGet paketi ekledim, sadece uygulamamın kara kutu bölümünün kütüphanenin eski bir sürümüne başvurduğunu fark etmek için.

Paketi kaldırdım ve eski sürümün statik DLL dosyasına başvurdum, ancak web.config dosyası hiçbir zaman güncellenmedi:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

paketi kaldırdığımda ne dönmüş olmalı:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

Bunu en azından NuGet'i kullandığınızda Entity Framework modülü için, çözümünüzü sağ tıklarsanız, Çözüm için NuGet Paketlerini Yönetin, ardından Yüklü Paketler> Tümü'ne gidin, o modülü seçin, Yönet'i seçin, genellikle projenizden seçimini kaldırın. Bu, manuel olarak yapmak zorunda kalmadan böyle şeyleri temizlemelidir --- satıcının durum tespiti yaptığını varsayarsak. Ama görünüşe göre bazen yakalamazlar, eğer böyle çıkarırsanız.
vapcguy

20

Benim durumumda, bir ASP.NET uygulaması çalıştırılırken bu hata oluştu. Çözüm:

  1. Proje klasöründeki objve binklasörlerini silme

Temiz işe yaramadı, yeniden inşa işe yaramadı, tüm referanslar iyiydi, ama kütüphanelerden birini yazmıyordu. Bu dizinleri sildikten sonra her şey mükemmel çalıştı.


3
Teşekkürler, Levi Fuller Bu cevap daha yüksek olmalı; benim durumum için spot on! Benim için bu hata, web.config dosyamın bir yedek kopyasını yaptığımda başladı ve Visual Studio, yinelenen kopyayı sildikten sonra bile gerçek yapılandırma yerine bu yapılandırma dosyasını yüklemeye devam etti. Bu çözdü. Teşekkürler.
BruceHill

Benim için de çalışıyor. Yine de bunun neden işe yaradığından emin
KangarooWest

14

Benim durumumda, C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \ dizinindeki DLL'nin eski bir sürümüdür. Eski sürümü silebilir veya değiştirebilirsiniz ya da projenizdeki DLL başvurusunu kaldırabilir ve geri ekleyebilirsiniz. Temel olarak, her iki durumda da geçici ASP.NET Dosyalarına yeni bir işaretçi oluşturur.


2
Visual Studio'yu kapattığımda, IIS'yi durdurduğumda ve tüm geçici ASP.NET dosyalarını sildiğimde bu benim için çalıştı. 64 bit makinede ise Framework ve Framework64 klasöründe, ayrıca .NET 2.0 ve 4.0 klasörlerinde dosyalar olabileceğini unutmayın!
Bryan B

Çözümüm tarafından oluşturulan tüm DLL'leri bulmak için Windows Başlat Menüsü arama işlevini kullandım ve nerede bulunurlarsa bulunsun bütün lotu sildim. Bunu korkusuzca yapabilirim çünkü bunlar sadece Visual Studio hata ayıklama sırasında oluşturulmalıdır. VS gibi eksik DLL'leri yeniden inşa edecek ve benim çözüm dışında hiçbir şey onları referans olmalıdır, bu benim için "güvenli" bir işlem oldu.
Zarepheth

8

Bizim için sorun başka bir şeyden kaynaklandı. DevExpress bileşenlerinin lisans dosyası, biri bu bilgisayarda yüklü olmayan bileşenlerin eski bir sürümü için olmak üzere iki satır içeriyordu. Eski sürümü lisans dosyasından kaldırmak sorunu çözdü.

Sinir bozucu kısım, hata mesajının hangi referansın sorunlara neden olduğuna dair hiçbir belirti vermemesidir.


2
Benim durumumda, yeni DevExpress sürümüne yükselttikten sonra, bir formun .resx dosyası eski kaldırılmış kitaplık sürümüne referanslar içeriyordu. Kod görünümünde .resx açmak ve sürümü yenisine düzeltmek veya geçersiz girişleri silmek zorunda kaldı.
Artemix

5

Yansıma kullanarak geç bağlamaya çalışırsanız, bağlandığınız derleme güçlü olarak adlandırılırsa veya genel anahtar belirteci değiştiyse, bu aynı hata atılır. Belirtilen ortak anahtar belirteciyle herhangi bir derleme bulunmamasına rağmen hata aynıdır.

Hatayı gidermek için doğru ortak anahtar belirtecini eklemeniz gerekir (dll'de sn -T'yi kullanarak alabilirsiniz). Bu yardımcı olur umarım.


1
Lütfen detaylandırın - "sn -T" nedir? Genel anahtar jetonunu nereye ekleyebilirim?
Moritz Her ikisi de

3
"sn.exe" Visual Studio ile birlikte gelen bir araçtır, Visual Studio komut isteminden çalıştırılabilen bir komut satırı aracıdır. Visual Studio komut istemini çalıştırın (başlat menüsünden), derlemenizi içeren klasöre gidin ve "sn -T <assembly>" yazın; burada <assembly> dll dosyasının tam adıdır. Bu Meclis "Token" bilgi alır. Bunu yaptıktan sonra, yansıma ile geç bağlanma yaparken, token bilgisini derleme kimliği dizesine girin (yani, "Assembly = MyAssembly.dll, Ortak Anahtar Simgesi = <belirteç kılavuzu>)
Guy Starbuck

2
Bu cevap için teşekkürler. Bu hatayı, App.ini dosyamdaki bir Yapılandırma Bölümü'ne başvururken alıyordum. Yakın zamanda derlemeyi imzalamıştım, bu yüzden PublicKeyToken = null değerinin yeni (doğru) jetonla güncellenmesi gerekiyordu.
Liam

5

Benimki Nathan Bedford'un göreve çok benzer bir durumdu ama hafif bir bükülme ile. Projem çok değiştirilen dll iki şekilde başvurdu. 1) Doğrudan ve 2) Dolaylı olarak kendisi değişti dll bir başvuru vardı bir bileşen (sınıf kütüphanesi) başvurularak. Şimdi bileşen (2) için benim Visual studio projesi değiştirilen dll doğru sürümü başvurdu. Ancak, bileşenin kendisinin sürüm numarası DEĞİŞTİRİLMEMİŞTİR. Ve sonuç olarak, projenin yeni sürümünün yüklenmesi, istemci makinede bu bileşenin yerini alamadı.

Sonuç: Doğrudan referans (1) ve Dolaylı referans (2), istemci makinede değiştirilen dll'nin farklı sürümlerine işaret ediyordu. Geliştirme makinemde iyi çalıştı.

Çözüm: Uygulamayı kaldırın; Uygulama klasöründen tüm DLL'leri silin; Benim durumumdaki gibi basit.


4

Birisinin kesme aptallığımdan yararlanmasına izin vereceğim. Tamamen ayrı bir uygulamaya bazı bağımlılıklar var (hadi bu App1 diyelim). Bu App1 gelen dll benim yeni uygulama (App2) içine çekilir. APP1 güncellemeleri yapmak her zaman, ben yeni dll oluşturmak ve bunları App2 kopyalamak zorunda. İyi. . 2 farklı App1 sürümü arasında kopyalama ve yapıştırma bıktım, bu yüzden sadece dll 'bir' NEW_ 'öneki ekledi.

İyi. . . Derleme işlemi / bin klasörünü tarar ve yanlış bir şey eşleştiğinde, yukarıda belirtildiği gibi aynı hata iletisi ile barfs tahmin ediyorum. "Yeni_" sürümlerimi sildim ve sadece züppe inşa etti.


4

Benim sorunum kaynak kodları başvurulan derlemeler herhangi bir çekmeden yeni bir makineye kopyalamak oldu.

Hatayı düzelttiğim bir şey yok, bu yüzden aceleyle, BIN dizinini tamamen sildim. Kaynak kodumu yeniden oluşturdum ve o andan itibaren çalıştı.


4

Sadece temel bir ASP.NET MVC 4 projesi oluşturduğumu ve NuGet üzerinden DotNetOpenAuth.AspNet eklediğimi eklemek istiyorum. Bu, Microsoft.Web.WebPages.OAuth için uyumsuz bir DLL dosyasına başvurduktan sonra aynı hatayla sonuçlandı.

Bunu düzeltmek için yaptım Update-Packageve tam bir yeniden inşası için çözümü temizledim.

Bu benim için çalıştı ve biraz tembel bir yol, ama zaman para :-P


1
Benzer cevap benim için. Update-Package -reinstalltüm NuGet paketlerini aynı sürümde yeniden yükler.
Jess

1
Bu harika; gönderi için teşekkürler. Tüm diğer harika önerileri denedim, ancak bu hile yapan çözümdü. 80 tane mevcut olsa bile, hala alternatif bir çözüm yayınlamak isteyen insanlar için çok şükür
Hambone

4

Bu hatayı Team Foundation Server'ın yapı hizmetini geliştirirken aldım. Aynı kütüphanenin NuGet ile eklenen farklı sürümlerini kullanarak çözümümde birden fazla projem olduğu ortaya çıktı. Tüm eski sürümleri NuGet ile kaldırdım ve yenisini referans olarak ekledim.

Team Foundation Server, tüm DLL dosyalarını tek bir dizine yerleştirir ve elbette belirli bir adda yalnızca bir DLL dosyası olabilir.


Başka bir yol da "Çözüm için NuGet paketlerini yönet ..." seçeneğini tıklamak ve hem test projenizi hem de test edilen projeyi aynı (en yeni) sürüme güncellemektir.
19x15

4

App.config dosyamda bir

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

npgsql için. Bir şekilde kullanıcının makinesinde, app.exe.config dosyam kayboldu. Aptal bir kullanıcı, yükleyici hatası veya anti-virüsün tükendiğinden emin değilim. Dosyanın değiştirilmesi sorunu çözdü.


3

Bu hatayı almak için başka bir neden buldum. GAC'ımı belirli bir kütüphanenin tüm sürümlerinden temizledim ve projemi, yürütülebilir dosyayla birlikte dağıtılan belirli sürüme referansla oluşturdum. Projeyi çalıştırdığımda, kütüphanenin daha yeni bir sürümünü arayan bu istisnayı aldım.

Nedeni yayıncı politikasıydı . Kitaplığın sürümlerini GAC'den kaldırdığımda, yerel olarak dağıtılmış montajımı kullanmak yerine yayıncı ilke derlemelerini kaldırmayı unuttum, derleyici yükleyici GAC'de daha yeni bir sürüm aramasını söyleyen yayıncı ilkesini buldu.


3

Bana göre "Local.testtesttings" dosyasındaki "kod kapsamı yapılandırması" soruna neden oldu. Orada başvurulan dosyaları güncellemeyi unuttum.


3

Sadece projenizin bin klasörünün içeriğini silmek ve çözümü yeniden oluşturmak sorunumu çözdü.


1
Ne biliyorsun, sadece sefaletimden kurtulmama yardım ettin, teşekkürler
Ronny Mahlangu

2

temiz ve yeniden oluşturma çözüm çıktı dizinden tüm dll's yerini olmayabilir.

ne önermek klasörü "bin" den "oldbin" veya "obj" için "oldobj" yeniden adlandırmayı deneyin

ve sonra silüsyonunuzu tekrar inşa etmeyi deneyin.

Eğer herhangi bir üçüncü taraf dll's kullanıyorsanız, başarılı bir derleme sonra yeni oluşturulan "bin" veya "obj" klasörüne kopyalamak gerekir.

umarım bu senin için çalışır.


1

Eski derlemeyi el ile klasör konumundan silmek ve ardından yeni derlemelere başvuru eklemek yardımcı olabilir.


1

Aynı hatayı aldım ... Benim durumumda şu şekilde çözüldü:

  • İlk başta uygulama yüklendiğinde, buradaki insanlar uygulamada Microsoft Enterprise Library 4.1'i kullanmıştı.
  • Önceki hafta makinem biçimlendirildi ve bundan sonra bu uygulamayı oluşturduğumdan sonra Enterprise Library derlemesinin eksik olduğu bir hata verdi.
  • Sonra Google'da ilk arama girişi olarak aldığım Microsoft Enterprise Library 5.0'ı yükledim.
  • Sonra uygulamayı inşa ettiğimde bana yukarıdaki hatayı verdi yani bulunan derlemenin manifest tanımı derleme referansı ile eşleşmiyor.
  • Bir arama çalışması ve analizinin çoğundan sonra, uygulamanın 4.1.0.0'a başvurduğunu ve bin klasöründeki DLL'nin 5.0.0.0 sürümü olduğunu buldum.
  • Yaptığım şey Microsoft Enterprise Library 4.1'i kurmaktı.
  • Önceki referans kaldırıldı (5.0) ve 4.0 referans eklendi.
  • Uygulama & voila inşa ... çalıştı.

1

İşte bu sorunu çözme yöntemim.

  1. Özel durum iletisinden "sorun" kitaplığının adını ve "beklenen" sürüm numarasını alın.

resim açıklamasını buraya girin

  1. Bu .dll dosyasının tüm kopyalarını çözümünüzde bulun , sağ tıklayın ve .dll dosyasının hangi sürümünün olduğunu kontrol edin.

resim açıklamasını buraya girin

Tamam, bu örnekte, benim .dll kesinlikle 2.0.5022.0 (istisna sürüm numarası yanlış).

  1. Çözümünüzdeki tüm .csproj dosyalarında Özel Durum iletisinde gösterilen sürüm numarasını arayın . Bu sürüm numarasını, dll'deki gerçek sayıyla değiştirin.

Yani, bu örnekte, bunun yerini alacağım ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... Bununla...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

İş bitmiş !


ne csproj dosyaları referans yok?
John Demetriou

1

Benim durumumda sandalye ve klavye arasında sorun :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

İki veya daha fazla farklı derleme DotNetOpenAuth kitaplığının farklı bir sürümünü kullanmak istedi ve bu sorun olmaz. Ayrıca, yerel bilgisayarımda bir web.config dosyası NuGet tarafından otomatik olarak güncellendi:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

Sonra yeni web.config dosyasını üretim sunucusuna kopyalamayı / dağıtmayı unuttuğumu fark ettim. Dolayısıyla, web.config dosyasını dağıtmak için manuel yolunuz varsa, güncel olup olmadığını kontrol edin. Üretim sunucusu için tamamen farklı web.config dosyanız varsa, NuGet'i kullandıktan sonra bu bağımlı Montaj bölümünü eşitlemede birleştirmeniz gerekir.


1

" Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor " gibi bir hata alırsanız ve VS'de Proje> NuGet Paketlerini ve Güncelleştir sekmesini yönet ile güncellediyseniz , yapabileceğiniz ilk şey, Galeri sayfasındaki sürümleri kontrol ettikten ve Paket Yöneticisi Konsolu'ndan aşağıdaki komutu çalıştırdıktan sonra paket:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

Her ne kadar cevap doğrudan söz konusu paketle ilgili olmasa da ve geri dönüş yolu sorulsa da, genel, hala alakalı ve umarım birine yardım eder.


1

Benim için hiçbir çözüm işe yaramadı. Temiz proje çözümü denedim, bin, güncelleme paketi, downgrade paketi vb. Denedim ... İki saat sonra varsayılan App.config'i derlemelerle projeden yükledim ve yanlış referans sürümünü değiştirdim:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

için:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

Bundan sonra projeyi temizledim, tekrar inşa ettim ve işe yaradı. Uyarı yok sorun yok.


0

Bu hata iletisini, oluşturduğum derleme ile aynı ada sahip bir derleme başvurması nedeniyle aldım.

Bu derlendi ancak başvurulan derlemenin üzerine güncel projeler derlemesinin üzerine yazarak hataya neden oldu.

Bunu düzeltmek için projenin adını ve montaj özelliklerini projeye sağ tıklayıp 'Özellikler'i seçerek değiştirdim.

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.