2009-10-09 3 views
20

Tôi có một dự án trang web mà tôi chạy từ Visual Studio bằng cách sử dụng máy chủ web được xây dựng trong phát triển. Đường dẫn ảo của trang web được thiết lập để /Tại sao chuyển hướng ràng buộc lắp ráp không hoạt động trong trang web của tôi?

Các web.config chứa một yếu tố thời gian chạy với

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="CMS.Controls" publicKeyToken="834b12a258f213f9" culture="neutral" /> 
     <bindingRedirect oldVersion="4.1.3518.21577" newVersion="4.1.3561.21846" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

tôi đã loại bỏ các thuộc tính xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" từ configuration phần tử gốc.

Dưới đây là lỗi:

Could not load file or assembly 'CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Đây là nhật ký của các ràng buộc:

The operation failed. 
Bind result: hr = 0x80131040. No description available. 
... 
LOG: DisplayName = CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9 
(Fully-specified) 
... 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: D:\Project\WebSite\web.config 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Post-policy reference: CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9 
... 
LOG: Assembly Name is: CMS.Controls, Version=4.1.3561.21846, Culture=neutral, PublicKeyToken=834b12a258f213f9 
WRN: Comparing the assembly name resulted in the mismatch: Revision Number 

Dường như với tôi như nó bỏ qua chuyển hướng của tôi. Tôi đã xem nó trong một giờ, tôi có lỗi đánh máy hay gì đó không?

+0

Bạn đã bao giờ tìm thấy câu trả lời cho điều này chưa? – Martin

+0

@Martin 4 năm tôi đã chờ đợi ...: o Có lẽ tôi đã tìm thấy cách sống với nó trở lại sau đó, và đã không phải đối mặt với cùng một vấn đề này kể từ đó. –

+0

Tôi không chắc liệu điều này có hữu ích hay không, nhưng hôm nay tôi gặp vấn đề này với OWIN. Tôi đã có một phiên bản khác nhau của OWIN được tham chiếu (thông qua Nuget) trong một dự án thư viện cho dự án chính của tôi. Dự án đích có một _bindingRedirect_ trong Web.config không hoạt động. Sau khi thay đổi Nuget để tham khảo phiên bản mới hơn được sử dụng trong thư viện, lỗi đã biến mất. _bindingRedirect_ của dự án đích vẫn giống với thuộc tính _newVersion_ được cập nhật lên phiên bản mới. Thay đổi thú vị duy nhất xảy ra là DLL giờ đây được bao gồm trong các tham chiếu cho .csproj. –

Trả lời

0

Bạn đã thử sử dụng số FUSLOGVW.exe được tìm thấy trong thư mục thùng SDK cho cài đặt Visual Studio của mình chưa? Điều này cho ra một đầu ra tiết hơn cho các lỗi liên kết lắp ráp.

Tệp kê khai không khớp với tham chiếu lắp ráp về cơ bản có nghĩa là nó đã tìm thấy lắp ráp sai vì tệp kê khai là siêu dữ liệu mô tả lắp ráp và nội dung của nó. Tôi thấy loạt bài này đã giải thích rất nhiều cho tôi về cách thức các ràng buộc lắp ráp hoạt động; .NET Assembly FAQ – Part 1

+5

Nhật ký tôi hiển thị trong câu hỏi của tôi LÀ đầu ra của FUSLOGVW.EXE. Và tệp kê khai không khớp với LÀ lý do tôi cần chuyển hướng. Câu hỏi vẫn còn: tại sao nó không được chuyển hướng? –

0

Đây có phải là vấn đề dll 64bit/32bit không, đôi khi có các bản dựng dll khác nhau cho các hệ thống khác nhau. Ngay cả khi bạn đang chạy phiên bản 64 bit của Windows, máy chủ web phát triển chạy dưới dạng ứng dụng 32 bit.

Bạn có thể chuyển sang máy chủ dev 64 bit nếu bạn chuyển sang Máy chủ CassinDev. Nó hoạt động giống nhau.

-1

Tôi gặp một vấn đề tương tự gần đây với việc sử dụng hai phiên bản vì vậy tôi đã làm sạch giải pháp và xây dựng lại một lần nữa nó làm việc đôi khi. Ngoài ra nếu làm sạch không xóa các tập tin từ thư mục bin, tôi đã xóa các tập tin bằng tay và xây dựng lại. Tùy thuộc vào phiên bản khung, chúng tôi cần xóa các tệp, đối với .net 4 ở đây là thư mục để tìm tệp tạm thời nơi phiên bản cũ bị rút lại C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ ASP tạm thời Tệp tin .NET

1

tôi biết đã lâu rồi, nhưng có lẽ điều này có thể giúp ai đó đôi khi ...

Chúng tôi gặp vấn đề tương tự trên một số dự án, đó là một ứng dụng web chứ không phải trang web, nhưng vấn đề liên quan đến hội đồng tham chiếu tôi không nghĩ sự khác biệt của loại dự án là có liên quan (tôi có thể sai)

Hãy nói rằng chúng tôi có các hội đồng sau:

  • WebApplicationAssembly

    1. CMSControlAsse mbly
    2. UserManagementAssembly

WebApplicationAssembly là tham khảo CMSControlAssembly và UserManagementAssembly.

Vì vậy, chúng tôi đã cố gắng thực hiện lắp ráp trên CMSControlAssembly, với nhiều thành công như bạn làm.

Sau khi một số đào đèn đã đưa ra:

điều là chúng ta sử dụng các WebControls bên CMSControlAssembly trực tiếp trong webapplication của chúng tôi. (assemblybinding được thiết lập với điều này trong tâm trí)

Nhưng CMSControlAssembly cũng được tham chiếu bởi UserManagementAssembly, và đây là nguyên nhân của vấn đề của chúng tôi.

UserManagementAssembly được biên dịch bằng phiên bản CMSControlAssembly thấp hơn so với phiên bản webapplication được sử dụng.

Phiên bản thấp hơn của hội đồng không được tìm thấy bởi ứng dụng web, vì phiên bản duy nhất được cung cấp là phiên bản được nhắm mục tiêu bởi assemblybinding.

Vì vậy, thực sự lỗi không hiển thị một assembly lắp ráp không chức năng, nhưng thiếu lắp ráp cho UserManagementAssembly.

+0

vì vậy giải pháp là? – Ming

+0

@Ming Nếu một hội đồng được tham chiếu nhiều lần, phiên bản phải giống nhau trong mỗi tham chiếu – Bombinosh

+2

Điều đó không giúp ích nếu đó là một bên thứ ba DLL đang tham chiếu phiên bản thấp hơn phiên bản bạn đã tham chiếu trong dự án của bạn. Đây là toàn bộ lý do bindingRedirect được tạo ra. –

0

Lý do duy nhất có thể giải thích một lỗi như thế này là phiên bản mới không được triển khai trên GAC (trong thư mục lắp ráp cửa sổ).

Important: Not deployed applies as well if the public key does not match between versions for example version 1 public key was abcd but new version uses efgh. Make sure public matches and that thew version is on the GAC.