2009-11-17 34 views
9

Tôi có một thư viện lớp được gọi là "MyAssembly" được tham chiếu nội bộ a.dll, b.dll phiên bản 3.1.1.0; Tôi đã xây dựng dự án đầu ra MyAssembly.dll. Trên một hệ thống khác (hộp) Tôi đã tạo một dự án ứng dụng web và tham chiếu đến MyAssembly.dll. hệ thống mới có các phiên bản mới của a.dll và b.dll 4.0.0; Tôi đã sử dụng chuyển hướng ràng buộc trong web.config như dưới đây. Nhưng vẫn không thể biên dịch ứng dụng web. nó nói thiếu tham chiếu assembly a.dll, phiên bản 3.1.1.0.Vấn đề chuyển hướng ràng buộc trong .net

Mọi người có thể giúp giải quyết vấn đề này không?

Cảm ơn, Suresh

Trả lời

6

này nên làm việc.

<runtime> 
<dependentAssembly> 
    <assemblyIdentity name="MyAssembly" publicKeyToken="12233444"/> 
    <bindingRedirect oldVersion="3.1.1.0" newVersion="4.0.0.0"/> 
</dependentAssembly> 
</runtime> 

Một giả thuyết khác: Hủy bỏ các không gian tên trong thẻ của cấu hình của bạn:

Thay vì

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 

thử

<configuration> 
+0

Tôi đã làm chính xác như vậy. Nhưng không may mắn. Trong khi biên dịch các dự án trong ide chính nó cho lỗi nói "là bạn thiếu assemblyreference a.dll 3.1.1.0 – Suresh

+1

Thẻ cấu hình không chứa thuộc tính xmlns. Không có may mắn – Suresh

+0

Nó làm việc trên mặt của tôi, cảm ơn. Câu hỏi của tôi là tại sao nó hoạt động khi – csg

0

Bạn đang sử dụng MyAssembly trong ứng dụng web của bạn. Chuyển hướng ràng buộc sẽ được sử dụng cho hội đồng này và không phải là các hội đồng mà MyAssembly sử dụng. Kiểm tra tệp kê khai cho tệp MyAssembly.dll, nó nên đề cập đến phiên bản 3.1.1.0 của a.dll, do đó lỗi trình biên dịch được hiển thị. Xây dựng MyAssembly với tham chiếu đến a.dll của phiên bản 4.0.0.0 và sau đó sử dụng MyAssembly trong ứng dụng web của bạn. Điều này sẽ làm việc.

0

Hãy thử cách này:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="a.dll" 
         publicKeyToken="{put a.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="b.dll" 
         publicKeyToken="{put b.dll publicKeytoken here}" 
         culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99" 
        newVersion="4.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

Ngoài ra, đi đến tài liệu tham khảo của ứng dụng của bạn, click chuột phải vào a.dll và b.dll, đi đến tài sản và kiểm tra xem "bản cụ thể" được thiết lập để False .

Hy vọng điều đó sẽ hữu ích.

19

Điều này hoàn toàn phù hợp với tôi. LƯU Ý: Bạn cần KHÔNG có không gian tên trên thẻ configuration. Và bạn PHẢI có một không gian tên trên thẻ assemblyBinding của bạn.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace --> 
<configuration> 
    <runtime> 
    <!-- important, must have this namespace --> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

làm cả những hoặc nếu không nó sẽ không đọc nó. Nếu nó đưa ra một lỗi mà nó không thể tải bất cứ điều gì nhưng 2.0.0.0 trong ví dụ này, sau đó nó không phải là chọn lên các yếu tố cấu hình đúng.

Điều này cũng chỉ hoạt động trên các hội đồng được đặt tên mạnh.Để tìm hiểu xem cái gì đó đang được đặt tên mạnh chạy lệnh sau từ cửa sổ lệnh VC

mở (start menu> All Programs> visual studio> công cụ visual studio> visual studio command prompt)

Sau đó chạy:

sn -vf "path-to-assembly.dll" 

Nếu nó trả về giá trị hợp lệ thì tên được đặt tên mạnh.

nguồn: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

+0

Điều này hoàn toàn cố định một vấn đề tôi đã có với một chuyển hướng ràng buộc bị bỏ qua cho một dự án web Cảm ơn bạn! – Jaans

+0

Tôi yêu bạn.Bạn hoàn toàn lưu sự tỉnh táo của tôi. –

+0

Cảm ơn bạn! Đã bỏ lỡ một không gian tên trong assemblyBinding –

Các vấn đề liên quan