2010-08-03 24 views
5

Tôi có một tệp Interop dll được tạo bởi Visual Studio cho đối tượng COM của bên thứ ba mà tôi đang tiêu thụ trong một tệp .dll .NET.GAC - Assembly nằm trong GAC nhưng “Không thể tải tập tin hoặc assembly”

Tôi đã đăng ký cả dll tiêu thụ của mình và dll Interop trong GAC. Tôi phải sử dụng GAC vì các DLL này đang được sử dụng bởi một luồng công việc SharePoint 2010.

Khi thực hiện được đến điểm mà dll của tôi gọi Interop dll lỗi sau được ném "" Không thể tải tệp hoặc lắp ráp "..." Hệ thống không thể tìm thấy tệp được chỉ định "cùng với phiên bản mong đợi và công khai Chìa khóa.

Nếu tôi kiểm tra Fusion hội Binding Log Viewer, các lỗi sau đây được liệt kê trong mục nhật ký của các dll Interop:

LOG: GAC Lookup was unsuccessful. 

tôi có thể thấy lắp ráp trong GAC, và nó có đúng phiên bản và mã thông báo khóa công khai như được chỉ định trong ngoại lệ FileNotFound.

Điều gì đang xảy ra?

Trả lời

4

Vấn đề là, cũng như phiên bản và Public Key là hợp lệ, Kiến trúc Processor của Interop phải khớp với gọi điện thoại của bạn DLL. Và, tất nhiên, Khung mục tiêu phải là cùng một phiên bản.

dll của tôi được biên dịch sang bộ xử lý MSIL (Agnostic, AnyCPU), nhưng vì một số lý do lạ Visual Studio nhấn mạnh về việc biên dịch Interop thành x386.

(Có thể điều này thường không gây ra sự cố, nhưng máy chủ SharePoint của tôi là 64 bit, điều này có thể khiến các triệu chứng xuất hiện).

Giải pháp là biên dịch bản thân Interop:

1 - Hủy đăng ký dll của bạn và Interop từ GAC.

2 - Bắt đầu Visual Studio Command Prompt của phiên bản Visual Studio liên quan đến .NET framework dll của bạn đang nhắm mục tiêu (tức là tôi đã phát triển dll của mình trong Visual Studio 2010, nhắm mục tiêu .NET 3.5. bước tôi cần thiết để khởi động Visual Studio 2008 Command Prompt)

3 - Tạo Interop sử dụng Tlbmp

tlbimp <full path and filename of COM .tlb> /out:c:\.\Interop.CoolThirdParty.dll /keyfile: <full path and filename of snk> /machine:Agnostic /Namespace:CoolThirdParty 

các /máy: Agnostic làm cho Interop sẽ được xây dựng nhắm vào Kiến trúc Processor MSIL, mà là t anh ấy giống như dll của tôi.

4 - Hủy bỏ các tham chiếu cũ sang Interop trong dự án dll của bạn

5 - Xóa file Interop cũ và thay thế bằng một mà bạn vừa tạo ra (ví dụ c: \ Interop.CoolThirdParty.dll.)

6 - Thêm tham chiếu trong dự án của bạn vào Interop mới.

7 - Rebuild

8 - Đăng ký mới của bạn xây dựng dll và Interop mới trong GAC

nên bắt đầu làm việc.

0

Hope đối tượng của bên thứ ba COM cũng được đăng ký trên máy tính này

2

Đóng Visual studio .... xóa tất cả các thư mục từ C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files

này nên giải quyết vấn đề của bạn ....

0

Tôi nhận được điều này cho một dòng trong webconfig của tôi trong biên soạn.assemblies tham chiếu một hội đồng trong GAC. Vấn đề là ai đó đã đặt một chuyển hướng assembly trong web.config chuyển hướng từ phiên bản đã có trong GAC sang một số phiên bản không tồn tại khác.

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