Tôi đã nhận được cùng một lỗi (không thể tiêu thụ đối tượng .NET từ mã kế thừa VB6 trên máy tính thứ hai, sau khi nó hoạt động trên máy đầu tiên mà ban đầu tôi đã viết nó). Các.NET DLL biên dịch và đăng ký tốt - Tôi đã thử tất cả các loại kết hợp - có và không sử dụng "Đăng ký cho COM Interop" xây dựng thiết lập trong VS; đăng ký bằng tay thông qua regasm.exe và thử cả hai có và không có tham số/codebase; đã thử cả bật và tắt thuộc tính mức độ hiển thị COM có thể nhìn thấy (khi triệt tiêu, tôi đặt thuộc tính trên lớp mà tôi cần để tiêu thụ từ COM). Nhưng không có gì làm việc, tôi cứ bị lỗi như vậy.
Hóa ra tôi đã nâng cấp đầu ra DLL thành .NET 4.5 trên máy thứ hai, trong khi ban đầu nó được xây dựng một hội đồng .NET 2.0. Dự án của tôi đã có một vài tài liệu tham khảo nhắm mục tiêu bên thứ 3 Interop DLL đang chạy .NET 2.0. Khi tôi hoặc cập nhật các tài liệu tham khảo và xây dựng lại DLL -hoặc thiết lập dự án của tôi trở lại để chạy trên .NET 2.0 - vấn đề của tôi đã được giải quyết. Khi sử dụng/codebase (mà VS tự động) Tôi thấy rằng tôi không cần phải đặt DLL của tôi trong thư mục ứng dụng hoặc trong \ syswow64. Ngoài ra các tài liệu MSDN nhà nước bạn phải sử dụng một SN (tên mạnh) cho lắp ráp của bạn khi sử dụng/codebase, nhưng tôi thấy bạn không phải; bạn chỉ nhận được một cảnh báo từ công cụ dòng lệnh regasm.exe.
Điểm là, từ quan điểm COM Interop, hãy cẩn thận về phiên bản .NET runtime của các phụ thuộc của bạn đối với .NET Framework bạn đang nhắm mục tiêu.
Tôi đã thử sử dụng regasm trên đường dẫn đầy đủ của hội đồng nằm trong c: \ temp, nhưng vẫn cùng lỗi – ingt
Sau đó, tôi đoán đặt cược tốt nhất của bạn là bắt đầu ProcessMonitor - http://technet.microsoft.com /ru-ru/sysinternals/bb896645.aspx - và xem chính xác tệp nào không tìm thấy. Nó có thể là một số hội đồng phụ thuộc mà bạn không hề biết. Một khi bạn biết chắc chắn nó sẽ dễ dàng hơn nhiều để giải quyết. – sharptooth
sharptooth, cảm ơn bạn * rất * rất nhiều cho câu trả lời này. Nó đã cứu giấu tôi ngày hôm nay! –