Lỗi CS1705: "có phiên bản cao hơn so với lắp ráp được tham chiếu"


109

Tôi đã xem xét vấn đề này một chút và vẫn chưa giải quyết được. Tôi nhận được thông báo lỗi sau:

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)

Máy chủ web đang chạy Server 2003. Tôi đã truy cập c: \ windows \ assembly và thực tế đã nhận thấy rằng có 3 phiên bản Common.dll được liệt kê. Phiên bản cao nhất được liệt kê là 3.3.4269.17112

Tôi đã sao chép dll với phiên bản: 3.3.4273.24368 vào thư mục hợp ngữ. Sau đó, tôi đã biên dịch lại và triển khai lại mã của mình (có thể là quá mức cần thiết nhưng rất tốt). Khi tôi mở trình duyệt của mình trong một phiên mới và truy cập lại URL của trang web, tôi vẫn nhận được thông báo tương tự.

Tôi có thể sử dụng windows explorer và xác minh Common.dll phiên bản cao hơn hiện cũng được liệt kê.

Tôi có thể xem xét thêm điều gì để giải quyết vấn đề này? Tôi không muốn thay đổi tham chiếu trong assembly của mình để trỏ đến phiên bản cũ hơn.


2
*.*Số phiên bản điên rồ . Xây dựng lại mọi thứ, chỉ có cách để chắc chắn.
Hans Passant

Câu trả lời:


39

3 ý tưởng để bạn thử:

  1. Đảm bảo rằng tất cả các dlls của bạn được biên dịch dựa trên cùng một phiên bản Common.
  2. Kiểm tra xem bạn có tham chiếu dự án trong giải pháp của mình thay vì tham chiếu tệp hay không.
  3. Sử dụng chuyển hướng ràng buộc trong web.config của bạn. ( Phiên bản được liên kết ban đầu tại máy quay lại )

Vẫn có sẵn tại máy quaymicrosoft
nitzel

68

Tôi gặp lỗi này vì "Xây dựng lại" không thực sự xây dựng lại.

Giải pháp: Đóng Visual Studio, thực sự đi và xóa thư mục bin, sau đó xây dựng lại, nó có thể hoạt động tốt hơn.

Ngoài ra, đôi khi Visual Studio nói dối về các tham chiếu, vì vậy hãy kiểm tra các tệp HintPathcủa bạn .csproj.


2
Cái này đã cứu thịt xông khói của tôi. Chạy địa phương là tốt, nhưng tôi đã xuất bản một thay đổi và mọi thứ trở nên tồi tệ. Việc xóa nội dung của thư mục thùng trực tuyến buộc mọi thứ phải đồng bộ trở lại. Cảm ơn!
pStan

40

Nếu bạn đang sử dụng NuGet, bạn nên vào 'Quản lý gói NuGet cho Giải pháp' , tìm gói đang gây ra sự cố và nhấn cập nhật. Sau đó, nó sẽ đưa tất cả các gói lên phiên bản mới nhất và giải quyết sự cố.

Đáng để thử vì nó nhanh chóng và dễ dàng.


2
Điều này đã giải quyết nó cho tôi, cảm ơn. Tuy nhiên, tình huống của tôi hơi khác: Nó không được liệt kê trong các bản cập nhật nên tôi phải vào cài đặt và có một cửa sổ hiển thị phiên bản gói cho mỗi dự án. Tôi đang nâng cấp một số mô-đun cũ lên phiên bản cms mới nên tôi phải đi tới các gói sự cố, chọn chúng và nhấp vào cài đặt. Có thể là do tin nhắn vừa được chuyển sang sử dụng nuget nhưng bạn đã tiết kiệm cho tôi rất nhiều csprojchỉnh sửa tẻ nhạt !
rtpHarry

3
Đảm bảo cập nhật các gói NuGet ở cấp giải pháp thay vì cấp dự án.
Jess

2
Đây chắc chắn phải là câu trả lời được chấp nhận bằng mọi cách, tôi đã không đọc điều này nhưng đã vô tình thử giải pháp của mình, điều này hoạt động như một sự quyến rũ.
baymax

30

Vấn đề của tôi là tôi có 2 dự án tham chiếu đến 2 bản sao khác nhau của cùng một dll có các phiên bản khác nhau. Tôi đã sửa nó bằng cách xóa cả hai và đảm bảo rằng chúng đang tham chiếu đến cùng một tệp dll.


13

Một nguyên nhân có thể là do tổ hợp thứ hai được cài đặt trong GAC trong khi tổ hợp thứ nhất, với số phiên bản cao hơn, được thêm vào Tài liệu tham khảo của dự án. Để xác minh điều này, hãy nhấp đúp vào hợp ngữ trong tham chiếu dự án và kiểm tra xem có một hợp ngữ khác có cùng tên trong Trình duyệt đối tượng hay không.

Nếu đúng như vậy, hãy sử dụng tiện ích gacutil.exe để gỡ cài đặt lắp ráp thứ hai khỏi GAC. Ví dụ: nếu đây là các hội đồng 64 bit:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>

Hai năm sau và lời đề nghị của bạn như một cái duyên. Việc xem các tham chiếu trong Trình duyệt Đối tượng đã sắp xếp nó.
ceebreenk

3

Đi tới Tham chiếu và thêm tham chiếu mới của tệp dll của bạn đang gây ra sự cố và đảm bảo rằng tất cả các dll của bạn được biên dịch dựa trên cùng một phiên bản. Nó hiệu quả với tôi, tôi hy vọng nó cũng hiệu quả với bạn.


2

Nhóm của tôi vừa gặp sự cố này trong môi trường xây dựng của chúng tôi. Sự cố là do sự khác biệt trong phần tử <HintPath> của tệp .csproj.

Assembly chung của chúng ta có một đường dẫn tương đối chính xác đến thư mục chứa các assembly tham chiếu của chúng ta. Hợp ngữ phụ thuộc có một đường dẫn từ cấu trúc thư mục cũ. Giải pháp được biên dịch thành công trên máy nhà phát triển khi GAC giải quyết tham chiếu của người phụ thuộc thành phiên bản chính xác được cài đặt trong C: \ Program Files. Môi trường xây dựng có một cài đặt cũ của hội đồng (mặc dù lẽ ra không có) mà nó đã rơi trở lại và do đó lỗi. Cập nhật <HintPath> trong trình soạn thảo văn bản đã khắc phục sự cố.


2

Vấn đề được nhìn thấy nếu các gói nuget khác nhau trong nhiều dự án trong giải pháp.

Bạn có thể khắc phục điều này bằng cách cập nhật các gói nuget lên phiên bản chung cho tất cả các DỰ ÁN trong GIẢI PHÁP


1

Gặp vấn đề tương tự. Vấn đề của tôi là tôi có một số dự án trong cùng một giải pháp mà mỗi dự án đều tham chiếu đến một phiên bản DLL cụ thể nhưng các phiên bản khác nhau. Giải pháp là đặt 'Phiên bản cụ thể' thành false trong tất cả các thuộc tính của tất cả các tham chiếu.


1

Tôi biết điều này đã được hỏi khá lâu trước đây, sau khi thử một số bước ở trên. Điều gì đã giúp tôi là các bước sau và bài viết này .

Tôi đã định vị tham chiếu và thay đổi PublicKeyToken từ tham chiếu đến cũ hơn.

Tôi hy vọng điều này cũng giúp.


1

Tôi đã có cùng một lỗi. Tôi đã sửa lỗi sau khi cài đặt Microsoft.AspNetCore.ALLvào dự án thử nghiệm.


0

Thư mục bộ sưu tập handmade dll của
Nếu bạn giải pháp có một thư mục rác cho dll-files từ thư viện khác nhau
lib, source, libsvv
Bạn có thể nhận được sự cố này nếu bạn mở giải pháp của bạn (trong một thời gian linh sam) trong Visual Studio. Và thư mục thu thập dll của bạn bị bỏ lỡ vì lý do nào đó hoặc một tệp dll cụ thể bị thiếu.

Visual Studio sẽ cố gắng âm thầm thay thế tham chiếu của dll cho một cái gì đó của riêng nó. Nếu VS thành công thì một tham chiếu mới sẽ được duy trì cho giải pháp cục bộ của bạn. Không dành cho các bản sao / kiểm tra khác.

Tức là của bạn <HintPath>sẽ bị bỏ qua và tệp dự án của bạn (.csproj) sẽ không bị thay đổi.
Như một ví dụ về tôi

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

Các DocumentFormat.OpenXmlsẽ được tham chiếu từ C:\Program Files (x86)\Open XML SDK\V2.5\libkhông phải từ một solution\..\libthư mục.

Cách giải quyết nhanh chóng

  • kiểm tra và khôi phục thư mục thu thập dll của bạn
  • từ Giải pháp Explorer thực hiện dỡ bỏ dự án , sau đó tải lại dự án .

Cách giải quyết đúng là chuyển sang trình quản lý gói NuGet.


0

đối với SharePoint, hãy đảm bảo rằng bên dưới thư mục gốc của bạn, bạn không có thư mục "bin" với tệp DLL của mình, nếu vậy chỉ cần xóa nó. (và thay đổi "Copy Local" thành false trong VS).


0

Các tham chiếu trong một dự án trang web được lưu trữ trong tệp web.config của nó. Cập nhật tài liệu tham khảo ở đó để sửa lỗi.

Tôi đã dành thời gian xem xét tất cả các tham chiếu trong giải pháp của mình trước khi nhận ra rằng tôi đã quên các tham chiếu trong tệp web.config.


0

Tôi đã gặp vấn đề tương tự với UnitTestingProject, trong đó trong MainProject, tôi đang sử dụng "System.Web.Mvc, Version = 3.0.0.0" và trong UnitTestingProject, tôi đang sử dụng "System.Web.Mvc, Version = 3.0.0.1"

Thay đổi phần sau trong <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

Tôi nhận được điều này sau khi thêm Episerver Find vào trang web của chúng tôi và cài đặt gói NuGet tương ứng cho Episerver Find.

Cách khắc phục rất dễ dàng: cập nhật tất cả các tiện ích bổ sung liên quan đến Episerver (ngay cả khi chúng có vẻ không liên quan: CMS, CMS.TinyMCE, CMS.UI, v.v.)

Sau khi cập nhật tất cả các tiện ích bổ sung có thể có của Episerver và biên dịch lại, lỗi đã biến mất.


0

Trong trường hợp của tôi, tôi đã chỉnh sửa tệp .csproj cho ứng dụng dotnetCore của mình. Tôi nhận thấy rằng thẻ TargetFramework có giá trị là netcoreapp2.1 và thẻ RuntimeFrameworkVersion có giá trị là 2.0.0 . Vì vậy, tôi đã thay đổi RuntimeFrameworkVersion thành 2.1.0 , lưu, khởi động lại VS và xây dựng lại và sau đó nó đã giải quyết các lỗi.

Hy vọng điều này sẽ giúp bạn ...

Chúc may mắn,

Sugeshan


-1

Trong dự án của bạn, hãy tìm tham chiếu System.Web.Mvc kiểm tra phiên bản.

Sau đó nhấp chuột phải vào tham chiếu -> assembly và tìm kiếm system.web.mvc và thiết lập nó.

Sự cố gây ra các phiên bản khác nhau của các hội đồng này .

Chỉnh sửa: Hơn chọn quản lý các gói NuGet và cài đặt các bản cập nhật (nếu bạn có nhiều dự án, hãy cài đặt các bản cập nhật cho chúng.)

Bản cập nhật quan trọng là Microsoft.AspNet.MvcMicrosoft.Net.Compilers đừng quên nó!


-1

Trong nhóm của chúng tôi, chúng tôi đã làm việc trên các máy tính khác nhau với git. Ai đó đã cập nhật a dllvà tôi không có. Tôi vừa cập nhật các tham chiếu phụ thuộc của mình và vấn đề đã được giải quyết.


-3

Tôi đã gặp sự cố tương tự, tôi đã tạo một DLL, tức là A.dll, tham chiếu đến DLL khác, tức là B.dll.

Tôi đã tạo một ứng dụng C.exe và các DLL được tham chiếu A.dll và B.dll.

Giải pháp - Khi xóa tham chiếu B.dll khỏi c.exe, tôi đã có thể khắc phục sự cố.

Hi vọng điêu nay co ich.

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.