Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp


751

Tôi đang thử chạy một số bài kiểm tra đơn vị trong ứng dụng C # Windows Forms (Visual Studio 2005) và tôi gặp lỗi sau:

System.IO.FileLoadException: Không thể tải tệp hoặc lắp ráp 'Utility, Version = 1.2.0.200, Culture = trung tính, PublicKeyToken = 764d581291d764f7' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040) **

tại x.Foo.FooGO ()

tại x.Foo.Foo2 (Chuỗi nhómName_) trong Foo.cs: dòng 123

tại x.Foo.UnitTests.FooTests.TestFoo () trong FooTests.cs: dòng 98 **

System.IO.FileLoadException: Không thể tải tệp hoặc lắp ráp 'Utility, Version = 1.2.0.203, Culture = trung tính, PublicKeyToken = 764d581291d764f7' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp. (Ngoại lệ từ HRESULT: 0x80131040)

Tôi tìm trong tài liệu tham khảo của mình và tôi chỉ có một tài liệu tham khảo Utility version 1.2.0.203(cái kia đã cũ).

Bất kỳ đề xuất nào về cách tôi tìm ra những gì đang cố gắng tham khảo phiên bản cũ của tệp DLL này?

Ngoài ra, tôi không nghĩ rằng tôi thậm chí còn có bộ lắp ráp cũ này trên ổ cứng của mình. Có công cụ nào để tìm kiếm phiên bản cũ này không?


Trong trường hợp của tôi, điều này xảy ra vì tôi có hai dự án tải cùng một DLL với các phiên bản khác nhau. (hy vọng điều này sẽ giúp được ai đó!)
Miguelmpn

Câu trả lời:


461

Trình tải hội .NET:

  • không thể tìm thấy 1.2.0.203
  • nhưng đã tìm thấy 1.2.0.200

Việc lắp ráp này không khớp với những gì được yêu cầu và do đó bạn gặp phải lỗi này.

Nói một cách đơn giản, nó không thể tìm thấy hội đồng được tham chiếu. Hãy chắc chắn rằng nó có thể tìm thấy lắp ráp đúng bằng cách đặt nó trong GAC hoặc trong đường dẫn ứng dụng. Xem thêm https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference .


19
nhưng khi tôi nhìn vào các tài liệu tham khảo của dự án, nó đang trỏ đến 1.2.0.203 ... dường như không còn gì để chỉ đến
1.2.0.200

128
Chính xác - nó đang tìm kiếm 1.2.0.203, nhưng nó đã tìm thấy 1.2.0.200. Tìm xem tập tin đó ở đâu và thay thế nó bằng phiên bản phù hợp.
Jon Skeet

18
Tôi đã hỏi một câu hỏi tương tự ở đây và nhận được một giải pháp hiệu quả: stackoverflow.com/questions/4187907/iêu
Michael La Voie

13
Kiểm tra phiên bản tham chiếu, và sau đó xem nếu nó giống nhau trong
gói.config

4
Tin nhắn này làm tôi bối rối mỗi lần. Nó dường như được viết ngược. Tôi hy vọng nó sẽ phàn nàn về phiên bản bạn đã yêu cầu tải, không phải phiên bản mà nó tìm thấy. Vui mừng tôi không phải là người duy nhất hiểu sai!
Greg Woods

91

Bạn có thể làm một vài điều để khắc phục sự cố này. Đầu tiên, sử dụng tìm kiếm tệp Windows để tìm kiếm ổ đĩa cứng của bạn cho lắp ráp của bạn (. Khi bạn có danh sách kết quả, hãy xem-> Chọn chi tiết ... và sau đó kiểm tra "Phiên bản tệp". Điều này sẽ hiển thị số phiên bản trong danh sách kết quả, vì vậy bạn có thể thấy phiên bản cũ có thể đến từ đâu.

Ngoài ra, như Lars nói, hãy kiểm tra GAC ​​của bạn để xem phiên bản nào được liệt kê ở đó. Bài viết này của Microsoft nói rằng các hội đồng được tìm thấy trong GAC không được sao chép cục bộ trong quá trình xây dựng, do đó bạn có thể cần phải xóa phiên bản cũ trước khi thực hiện xây dựng lại tất cả. (Xem câu trả lời của tôi cho câu hỏi này để biết các lưu ý khi tạo tệp bó để làm điều này cho bạn)

Nếu bạn vẫn không thể tìm ra phiên bản cũ đến từ đâu, bạn có thể sử dụng ứng dụng fuslogvw.exe đi kèm với Visual Studio để có thêm thông tin về các lỗi liên kết. Microsoft có thông tin về công cụ này ở đây . Lưu ý rằng bạn sẽ phải bật ghi nhật ký bằng cách đặt HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogkhóa đăng ký thành 1.


19
Đừng quên rằng Phiên bản tệp không phải là một phần của danh tính tập hợp. Phiên bản hội là, nhưng không nhất thiết phải giống với Phiên bản tệp!
Lars Truijens

Nếu sử dụng fuslogvw cho các dịch vụ, hãy đọc blog.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Nick

Tìm kiếm tên tệp đã giải quyết vấn đề của tôi. Tôi đã có một phiên bản cũ của dll trong thư mục tạm thời ASP.Net và InstallShield đang sử dụng phiên bản đó thay vì phiên bản cập nhật! Làm sạch giải pháp, xây dựng lại, khởi động lại PC không làm gì cả. Làm việc tốt tại địa phương và nổ tung mỗi khi nó được triển khai.
JumpingJezza

Ngay sau khi xây dựng, trang web của tôi hoạt động tốt, nhưng một lát sau, vấn đề này tăng lên.
Shavais

Tôi chỉnh sửa câu trả lời này để nói phiên bản lắp ráp thay thế.
Worthy7

60

Tôi chỉ gặp vấn đề này một mình và tôi thấy rằng vấn đề này là một cái gì đó khác với những gì những người khác đã gặp phải.

Tôi đã có hai DLL mà dự án chính của tôi đã tham khảo: CompanyClass.dll và CompanyControls.dll. Tôi đã nhận được một lỗi thời gian chạy nói:

Không thể tải tệp hoặc tập hợp 'CompanyClass, Version = 1.4.1.0, Culture = trung tính, PublicKeyToken = 045746ba8544160c' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp

Rắc rối là, tôi không có bất kỳ tệp CompanyClass.dll nào trên hệ thống của mình với số phiên bản 1.4.1. Không có trong GAC, không có trong các thư mục ứng dụng ... không có ở bất cứ đâu. Tôi đã tìm kiếm toàn bộ ổ cứng của tôi. Tất cả các tệp CompanyClass.dll tôi có là 1.4.2.

Vấn đề thực sự, tôi thấy, là CompanyControls.dll phiên bản tham chiếu 1.4.1 của CompanyClass.dll. Tôi vừa biên dịch lại CompanyControls.dll (sau khi có tài liệu tham khảo CompanyClass.dll 1.4.2) và lỗi này đã biến mất đối với tôi.


2
+1 Một cái gì đó tương tự đã xảy ra với tôi khi tôi có một trong những DLL của tôi tham chiếu một phiên bản cũ hơn của Caliburn Micro.
Jason Massey

tôi cũng vậy, kinh nghiệm của bạn đã châm ngòi cho tôi nơi tôi cần tìm và tôi đã khắc phục được vấn đề của mình.
Esen

Một tùy chọn khác là mở CompanyControlsdự án, nhấp chuột phải vào CompanyClasses.dlltham chiếu -> thuộc tính ->SpecificVersion = false
BlueRaja - Danny Pflughoeft

đây là trường hợp rất thường gặp trên các ứng dụng xamarin. Tôi đã có dự án xamarin.forms khác với dự án xamarin.droid. Tôi chỉ thấy bài viết của bạn và tôi nhận ra nó.
batmaci

Nếu CompanyClass.dll được ký, thì SpecificVersion = falsemột mình sẽ không cắt nó. Bạn sẽ cần một bindingredirect.
Denise Skidmore

53

Sau đây chuyển hướng bất kỳ phiên bản lắp ráp nào sang phiên bản 3.1.0.0. Chúng tôi có một tập lệnh sẽ luôn cập nhật tham chiếu này trong App.config để chúng tôi không bao giờ phải xử lý vấn đề này nữa.

Thông qua sự phản chiếu, bạn có thể nhận được hội đồng publicKeyToken và tạo khối này từ chính tệp dll.

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

Lưu ý rằng nếu không có thuộc tính không gian tên XML (xmlns) thì điều này sẽ không hoạt động.


1
Điều này làm việc cho tôi. Tôi đã thay đổi 'newVersion = 3.3.3' thành 'newVersion = 3.1.0'
jward01

Tốt nhất không nên đi xuống tuyến đường rebinding nếu bạn có thể tránh nó mặc dù. Khi con bọ đó cắn bạn, nó sẽ cắn mạnh.
BanksySan

1
Vấn đề của tôi là thực tế là các chuyển hướng đã chỉ đến các hội đồng không tồn tại. App.Config giữ thông tin lắp ráp từ các gói NuGet mới nhất mà tôi đã cài đặt. Khi tôi hạ cấp các gói này sau đó, nó KHÔNG làm sạch nó. Đây là một thư viện lớp tiêu chuẩn .NET đang bị tấn công bởi một dự án thử nghiệm đơn vị khung 4.7.2. Vấn đề của dự án thử nghiệm đơn vị được trình bày trong thời gian chạy ..
D-Sect

@ D-phái là đúng. Nếu kiểm soát nguồn của bạn chỉ ra rằng web.config có các thay đổi (vì bạn đã chơi với NuGets của mình), bạn có thể khôn ngoan để sao lưu các ràng buộc ràng buộc đó ra khỏi đó. Việc hạ cấp NuGets sẽ không dọn sạch các chuyển hướng ràng buộc
bkwdesign

45

Nếu bạn đang sử dụng Visual Studio, hãy thử "giải pháp sạch" và sau đó xây dựng lại dự án của bạn.


14
Đây thường là giải pháp cho tôi. Thông thường, xóa binobjlàm điều đó. Về cơ bản, một cái gì đó tôi từng tham khảo vẫn đang ngồi đó cố gắng đáp ứng yêu cầu tương tự. Ví dụ: phiên bản cũ là thứ tôi tham khảo trực tiếp và phiên bản mới có trên NuGet.
David Betz

Đã gặp vấn đề này đối với một số DLL sau khi lấy từ TFS. Giải pháp này đã sửa nó cho tôi.
Milo

3
Đã làm cho tôi. Xóa thư mục bin amd obj và giải quyết vấn đề.
dùng1619480

Cảm ơn, cũng làm việc cho tôi, chỉ cần xóa thư mục bin.
Chó Cookies

Đối với tôi nó là đủ để xóa binthư mục. Đáng ngạc nhiên, tôi đã thử giải pháp sạchxây dựng lại giải pháp trước khi không thành công. Đôi khi hơi lạ.
Sư tử

36

Các câu trả lời khác sẽ không làm việc cho tôi. Nếu bạn không quan tâm đến phiên bản và bạn chỉ muốn ứng dụng của mình chạy thì nhấp chuột phải vào tham chiếu và đặt 'phiên bản cụ thể' thành false ... Điều này hiệu quả với tôi. nhập mô tả hình ảnh ở đây


8
Cài đặt đó chỉ có hiệu lực tại thời gian biên dịch . Sau khi được biên dịch, nó sẽ cần phiên bản lắp ráp chính xác mà bạn đã biên dịch. Xem stackoverflow.com/questions/24022134/
Mạnh

22

Tôi mới chạy qua vấn đề này và vấn đề là tôi đã có một bản sao cũ của thư mục gỡ lỗi ứng dụng. Bạn cũng có thể muốn kiểm tra ở đó (thay vì GAC) để xem nếu bạn thấy nó.


Chúng tôi chỉ di chuyển đến một máy chủ khác có vấn đề này vì chúng tôi tiếp tục sao lưu. Làm việc sau khi xóa bản sao lưu. Cảm ơn :)
Jtuck

22

Tôi sẽ thổi bay tâm trí của mọi người ngay bây giờ. . .

Xóa tất cả các <assemblyBinding>tham chiếu khỏi tệp .config của bạn, rồi chạy lệnh này từ bảng điều khiển Trình quản lý gói NuGet:

Get-Project -All | Add-BindingRedirect

Làm việc cho tôi là tốt. Cảm ơn
Oleh Udovytskyi

bạn đã tiết kiệm thời gian của tôi
Abdu Imam

4
điều này chỉ hoạt động khi định dạng quản lý gói là
gói.config

1
Tâm trí chính thức nổ tung
BGilman

đó là một mẹo nhỏ rất hay
hexagod

21

Tôi đã thêm gói NuGet, chỉ để nhận ra một phần hộp đen trong ứng dụng của tôi đang tham chiếu một phiên bản cũ hơn của thư viện.

Tôi đã gỡ bỏ gói và tham chiếu tệp DLL tĩnh của phiên bản cũ hơn, nhưng tệp web.config không bao giờ được cập nhật từ:

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

với những gì đáng lẽ phải hoàn nguyên khi tôi gỡ cài đặt gói:

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

Tôi đã thấy điều này ở đâu, ít nhất là cho mô-đun Entity Framework khi bạn sử dụng NuGet, nếu bạn nhấp chuột phải vào giải pháp của mình, hãy đi tới Quản lý gói NuGet cho Giải pháp, sau đó Cài đặt gói> Tất cả, chọn mô-đun đó, chọn Quản lý, bạn có thể thường bỏ chọn nó từ dự án của bạn. Điều đó sẽ dọn sạch những thứ như thế này mà không cần phải làm thủ công --- giả sử nhà cung cấp đã thực hiện trách nhiệm của họ. Nhưng tốt là dường như đôi khi họ không, nếu đó là cách bạn loại bỏ nó.
vapcguy

20

Trong trường hợp của tôi, lỗi này xảy ra trong khi chạy một ứng dụng ASP.NET. Giải pháp là:

  1. Xóa objbinthư mục trong thư mục dự án

Clean không hoạt động, xây dựng lại không hoạt động, tất cả các tài liệu tham khảo đều ổn, nhưng nó không viết một trong những thư viện. Sau khi xóa các thư mục đó, mọi thứ hoạt động hoàn hảo.


3
Cảm ơn, Levi Fuller. Câu trả lời này sẽ cao hơn; Đối với tình hình của tôi, nó là tại chỗ! Đối với tôi, lỗi này bắt đầu khi tôi tạo một bản sao lưu của web.config và Visual Studio tiếp tục tải tệp cấu hình này thay vì cấu hình thực tế, ngay cả sau khi tôi xóa bản sao. Điều này đã giải quyết nó. Cảm ơn.
BruceHill

Làm việc cho tôi quá. Vẫn không chắc chắn tại sao điều này hoạt động mặc dù :(
KangarooWest

14

Trong trường hợp của tôi, đó là một phiên bản cũ của DLL trong thư mục C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ tạm thời ASP.NET Files \. Bạn có thể xóa hoặc thay thế phiên bản cũ hoặc bạn có thể xóa và thêm lại tham chiếu vào DLL trong dự án của bạn. Về cơ bản, một trong hai cách sẽ tạo một con trỏ mới cho các tệp ASP.NET tạm thời.


2
Điều này làm việc cho tôi khi tôi đóng Visual Studio, dừng IIS và xóa tất cả các tệp ASP.NET tạm thời. Lưu ý rằng có thể có các tệp trong thư mục Framework và Framework64 nếu trên máy 64 bit, cũng như trong các thư mục .NET 2.0 và 4.0!
Bryan B

Tôi đã sử dụng chức năng tìm kiếm Windows Start Menu để tìm tất cả các DLL được tạo bởi giải pháp của tôi và sau đó xóa toàn bộ lô, bất cứ nơi nào chúng được tìm thấy. Tôi có thể làm điều này mà không sợ hãi vì chúng chỉ nên được tạo trong quá trình gỡ lỗi Visual Studio của tôi. Vì VS sẽ xây dựng lại các DLL bị thiếu như vậy và không có gì ngoài giải pháp của tôi nên tham khảo chúng, đây là một hoạt động "an toàn" đối với tôi.
Zarepheth

8

Đối với chúng tôi, vấn đề là do một thứ khác. Tệp giấy phép cho các thành phần DevExpress bao gồm hai dòng, một dòng cho phiên bản cũ của các thành phần chưa được cài đặt trên máy tính cụ thể này. Loại bỏ phiên bản cũ hơn khỏi tệp giấy phép đã giải quyết vấn đề.

Phần khó chịu là thông báo lỗi không đưa ra dấu hiệu nào cho biết tham chiếu nào gây ra sự cố.


2
Trong trường hợp của tôi, sau khi nâng cấp lên phiên bản DevExpress mới, tệp .resx của một biểu mẫu có chứa các tham chiếu đến phiên bản thư viện đã gỡ cài đặt cũ. Tôi đã phải mở .resx trong chế độ xem mã và sửa phiên bản thành mới hoặc xóa các mục không hợp lệ.
Artemix

5

Lỗi chính xác này được đưa ra nếu bạn cố gắng liên kết muộn bằng cách sử dụng sự phản chiếu, nếu hội đồng bạn đang ràng buộc để được đặt tên mạnh hoặc thay đổi mã thông báo khóa công khai của nó. Lỗi là như nhau mặc dù thực tế không có bất kỳ hội đồng nào được tìm thấy với mã thông báo khóa chung được chỉ định.

Bạn cần thêm mã thông báo khóa công khai chính xác (bạn có thể lấy mã này bằng sn -T trên dll) để khắc phục lỗi. Hi vọng điêu nay co ich.


1
Xin hãy giải thích - "sn -T" là gì? Và tôi phải thêm mã thông báo khóa công khai ở đâu?
Moritz Cả

3
"sn.exe" là một công cụ đi kèm với Visual Studio, đây là một công cụ dòng lệnh có thể được chạy từ dấu nhắc lệnh của Visual Studio. Chỉ cần chạy dấu nhắc lệnh của Visual Studio (từ menu bắt đầu), điều hướng đến thư mục chứa cụm của bạn và nhập "sn -T <assembly>" trong đó <assembly> là tên đầy đủ của dll. Điều này nhận được thông tin "Token" hội. Khi bạn đã có điều này, khi bạn thực hiện liên kết muộn với phản chiếu, hãy nhập thông tin mã thông báo vào chuỗi id lắp ráp (nghĩa là "Hội = MyAss lanh.dll, Mã thông báo khóa công khai = <hướng dẫn mã thông báo>)
Guy Starbuck

2
Cảm ơn câu trả lời này. Tôi đã gặp lỗi này khi tham khảo Phần cấu hình trong App.ini của mình. Gần đây tôi đã ký hợp đồng, vì vậy PublicKeyToken = null phải được cập nhật với mã thông báo (chính xác) mới.
Liam

5

Của tôi là một tình huống rất giống với bài viết của Nathan Bedford nhưng với một chút thay đổi. Dự án của tôi cũng tham chiếu dll thay đổi theo hai cách. 1) Trực tiếp và 2) Một cách gián tiếp bằng cách tham chiếu một thành phần (thư viện lớp) mà chính nó có tham chiếu đến dll đã thay đổi. Bây giờ dự án Visual studio của tôi cho thành phần (2) đã tham chiếu phiên bản chính xác của dll đã thay đổi. Tuy nhiên, số phiên bản của chính công ty KHÔNG được thay đổi. Và kết quả là việc cài đặt phiên bản mới của dự án không thể thay thế thành phần đó trên máy khách.

Kết quả cuối cùng: Tham chiếu trực tiếp (1) và Tham chiếu gián tiếp (2) đã trỏ đến các phiên bản khác nhau của dll đã thay đổi ở máy khách. Trên máy dev của tôi nó hoạt động tốt.

Giải quyết: Xóa ứng dụng; Xóa tất cả các DLLS khỏi thư mục ứng dụng; Cài đặt lại. Đơn giản như trong trường hợp của tôi.


4

Tôi sẽ để ai đó hưởng lợi từ sự ngu ngốc của tôi. Tôi có một số phụ thuộc vào một ứng dụng hoàn toàn riêng biệt (hãy gọi App1 này). Các dll từ App1 đó được kéo vào ứng dụng mới của tôi (App2). Bất cứ khi nào tôi cập nhật trong APP1, tôi phải tạo dll mới và sao chép chúng vào App2. Tốt. . . Tôi cảm thấy mệt mỏi khi sao chép và dán giữa 2 phiên bản App1 khác nhau, vì vậy tôi chỉ cần thêm tiền tố 'NEW_' vào dll.

Tốt. . . Tôi đoán rằng quá trình xây dựng sẽ quét thư mục / bin và khi nó khớp với thứ gì đó không chính xác, nó sẽ xuất hiện cùng một thông báo lỗi như đã lưu ý ở trên. Tôi đã xóa các phiên bản "new_" của mình và nó được xây dựng rất đẹp.


4

Vấn đề của tôi là sao chép mã nguồn vào một máy mới mà không kéo theo bất kỳ hội đồng tham chiếu nào.

Không có gì mà tôi đã sửa lỗi, vì vậy trong sự vội vàng, tôi đã xóa thư mục BIN hoàn toàn. Xây dựng lại mã nguồn của tôi và nó hoạt động từ đó trở đi.


4

Tôi muốn chỉ thêm rằng tôi đang tạo một dự án ASP.NET MVC 4 cơ bản và thêm DotNetOpenAuth.AspNet thông qua NuGet. Điều này dẫn đến lỗi tương tự sau khi tôi tham chiếu tệp DLL không khớp cho Microsoft.Web.WebPages.OAuth.

Để sửa nó tôi đã làm một Update-Package và làm sạch các giải pháp để xây dựng lại đầy đủ.

Điều đó làm việc cho tôi và là một cách lười biếng, nhưng thời gian là tiền bạc :-P


1
Câu trả lời tương tự cho tôi. Update-Package -reinstallcài đặt lại tất cả các gói NuGet ở cùng một phiên bản.
Jess

1
Điều đó thật tuyệt; Cảm ơn vì đăng. Tôi đã thử tất cả những gợi ý tuyệt vời khác, nhưng đây là giải pháp đã làm được điều đó. Cảm ơn lòng tốt cho những người vẫn sẵn sàng đăng một giải pháp thay thế, ngay cả khi có sẵn 80 giải pháp
Hambone

4

Tôi đã gặp lỗi này khi xây dựng dịch vụ xây dựng của Team Foundation Server. Hóa ra tôi đã có nhiều dự án trong giải pháp của mình bằng các phiên bản khác nhau của cùng một thư viện được thêm vào với NuGet. Tôi đã xóa tất cả các phiên bản cũ bằng NuGet và thêm phiên bản mới làm tài liệu tham khảo cho tất cả.

Team Foundation Server đặt tất cả các tệp DLL trong một thư mục và chỉ có thể có một tệp DLL của một tên nhất định tại một thời điểm.


Một cách khác là nhấp vào "Quản lý gói NuGet cho giải pháp ..." và cập nhật cả dự án thử nghiệm của bạn và dự án đang thử nghiệm lên cùng một phiên bản (mới nhất).
lixonn

4

App.config của tôi chứa một

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

cho npgsql. Bằng cách nào đó trên máy của người dùng, app.exe.config của tôi bị mất. Tôi không chắc chắn liệu đó có phải là một người dùng ngớ ngẩn, cài đặt trục trặc hay đã loại bỏ vi-rút chưa. Thay thế các tập tin giải quyết vấn đề.


3

Tôi chỉ tìm thấy một lý do tại sao để có được lỗi này. Tôi đã dọn sạch GAC của mình khỏi tất cả các phiên bản của một thư viện cụ thể và xây dựng dự án của tôi với tham chiếu đến phiên bản cụ thể được triển khai cùng với tệp thực thi. Khi tôi chạy dự án, tôi đã có ngoại lệ này để tìm kiếm một phiên bản mới hơn của thư viện.

Lý do là chính sách của nhà xuất bản . Khi tôi gỡ cài đặt các phiên bản của thư viện khỏi GAC, tôi cũng quên gỡ cài đặt các chính sách của nhà xuất bản, thay vì sử dụng lắp ráp được triển khai tại địa phương, trình tải lắp ráp đã tìm thấy chính sách của nhà xuất bản trong GAC, nó đã tìm kiếm phiên bản mới hơn.


3

Đối với tôi, cấu hình bảo hiểm mã trong tệp "Local.testtesttings" "gây ra" sự cố. Tôi quên cập nhật các tập tin được tham chiếu ở đó.


3

Chỉ cần xóa nội dung của thư mục bin của dự án của bạn và xây dựng lại giải pháp đã giải quyết vấn đề của tôi.


1
Chà, bạn biết gì không, bạn chỉ giúp tôi thoát khỏi cảnh khốn khổ của mình, thực sự cảm ơn
Ronny Mahlangu

2

làm sạch và xây dựng lại giải pháp có thể không thay thế tất cả các dll từ thư mục đầu ra.

những gì tôi sẽ đề nghị là thử đổi tên thư mục từ "bin" thành "oldbin" hoặc "obj" thành "oldobj"

và sau đó thử xây dựng sự im lặng của bạn một lần nữa.

Nếu bạn đang sử dụng bất kỳ dll của bên thứ ba nào, bạn sẽ cần sao chép vào thư mục "bin" hoặc "obj" mới được tạo sau khi xây dựng thành công.

hy vọng điều này sẽ làm việc cho bạn.


1

Xóa thủ công lắp ráp cũ khỏi vị trí thư mục và sau đó thêm tham chiếu vào các cụm mới có thể giúp ích.


1

Tôi đã nhận được cùng một lỗi ... Trong trường hợp của tôi, nó đã được giải quyết như sau:

  • Lúc đầu khi ứng dụng được cài đặt thì người dân ở đây đã sử dụng Microsoft Enterprise Library 4.1 trong ứng dụng.
  • Trong tuần trước, máy của tôi đã được định dạng và sau đó hôm nay khi tôi xây dựng ứng dụng đó thì nó đã báo lỗi cho tôi về việc lắp ráp Thư viện doanh nghiệp.
  • Sau đó, tôi đã cài đặt Microsoft Enterprise Library 5.0 mà tôi nhận được trên Google dưới dạng mục tìm kiếm đầu tiên.
  • Sau đó, khi tôi xây dựng ứng dụng thì nó đã báo lỗi ở trên, tức là định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp.
  • Sau nhiều công việc tìm kiếm & phân tích, tôi thấy ứng dụng đó đang đề cập đến 4.1.0.0 và DLL trong thư mục bin là phiên bản 5.0.0.0
  • Những gì tôi đã làm là sau đó tôi đã cài đặt Thư viện Microsoft Enterprise 4.1.
  • Đã xóa tham chiếu trước đó (5.0) và thêm tham chiếu 4.0.
  • Xây dựng ứng dụng & voila ... nó hoạt động.

1

Đây là phương pháp của tôi để khắc phục vấn đề này.

  1. Từ thông báo ngoại lệ, lấy tên của thư viện "sự cố" và số phiên bản "dự kiến".

nhập mô tả hình ảnh ở đây

  1. Tìm tất cả các bản sao của dll đó trong giải pháp của bạn, nhấp chuột phải vào chúng và kiểm tra xem đó là phiên bản nào của.

nhập mô tả hình ảnh ở đây

Được rồi, vì vậy trong ví dụ này, tôi chắc chắn là 2.0.5022.0 (vì vậy số phiên bản Exception là sai).

  1. Tìm kiếm số phiên bản được hiển thị trong thông báo Ngoại lệ trong tất cả các tệp .csproj trong giải pháp của bạn. Thay thế số phiên bản này bằng số thực tế từ dll.

Vì vậy, trong ví dụ này, tôi sẽ thay thế ...

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

... Với cái này...

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

Công việc hoàn thành !


Điều gì xảy ra nếu các tệp csproj của tôi không có phiên bản tham chiếu?
John Demetriou

1

Trong trường hợp của tôi, vấn đề là giữa ghế và bàn phím :-)

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)

Hai hoặc nhiều hội đồng khác nhau muốn sử dụng một phiên bản khác nhau của thư viện DotNetOpenAuth và đó không phải là vấn đề. Hơn nữa, trên máy tính cục bộ của tôi, web.config đã được NuGet tự động cập nhật:

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

Sau đó, tôi nhận ra rằng tôi đã quên sao chép / triển khai web.config mới đến máy chủ sản xuất. Vì vậy, nếu bạn có cách triển khai web.config thủ công, hãy kiểm tra xem nó đã được cập nhật chưa. Nếu bạn có web.config hoàn toàn khác cho máy chủ sản xuất, bạn phải hợp nhất các phần phụ thuộc này đồng bộ hóa sau khi sử dụng NuGet.


1

Nếu bạn từng gặp lỗi như " Định nghĩa tệp kê khai của cụm lắp ráp không khớp với tham chiếu lắp ráp " và nếu bạn đã cập nhật qua Project> Quản lý gói NuGet và tab Cập nhật trong VS , điều đầu tiên bạn có thể làm là thử cài đặt phiên bản khác của gói sau khi kiểm tra các phiên bản từ trang Thư viện NuGet và chạy lệnh folowing từ Gói Trình quản lý gói:

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

Mặc dù câu trả lời không liên quan trực tiếp đến gói trong câu hỏi và nó đã được hỏi lại, nhưng nó là loại chung chung, vẫn có liên quan và hy vọng nó sẽ giúp được ai đó.


1

Không có giải pháp làm việc cho tôi. Tôi đã thử giải pháp dự án sạch, xóa thùng, cập nhật gói, hạ cấp gói, v.v ... Sau hai giờ tôi đã tải App.config mặc định từ dự án với các cụm và tôi đã thay đổi phiên bản tham chiếu sai từ:

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

đến:

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

Sau này tôi dọn dẹp dự án, xây dựng lại và nó hoạt động. Không cảnh báo không có vấn đề.


0

Tôi đã nhận được thông báo lỗi này do tham chiếu một hội đồng có cùng tên với hội đồng tôi đang xây dựng.

Điều này được biên dịch nhưng nó ghi đè lên tập hợp được tham chiếu với tập hợp các dự án hiện tại - do đó gây ra lỗi.

Để sửa lỗi, tôi đã thay đổi tên của dự án và các thuộc tính lắp ráp có sẵn thông qua nhấp chuột phải vào dự án và chọn 'Thuộc tính'.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.