2016-08-09 77 views
13

Tôi có một kịch bản như thế này:Tài liệu tham khảo Tài liệu tham khảo với COM gọi

  1. COM Gọi từ một ứng dụng MS Access sử dụng VBA
  2. Gọi là vào một C# thư viện chúng tôi đang xây dựng trong đó có một tham chiếu đến Newtonsoft. Json v9
  3. Thư viện sử dụng gói nuget với sự phụ thuộc của riêng Newton Newton.Json v6 (Say, Microsoft.AspNet.WebApi.Client)
  4. Thư viện phụ thuộc trong mã blackbox của chính nó phát sinh khi họ cố gắng sử dụng Newtonsoft.Json (hoặc bất kỳ thư viện nào không giống phiên bản C# libra của chúng tôi ry là tham khảo)

Lỗi:

Could not load file or assembly 'Newtonsoft.Json, Version=6.0.4.0, Culture=neutral, 
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. 
The system cannot find the file specified. 

Tôi hy vọng tôi cần một cái gì đó giống như một dependentAssembly chuyển hướng liên kết ở đâu đó như những gì bạn sử dụng trong Net để chỉ ra làm thế nào để giải quyết các loại của sự vật, nhưng tôi thiên đường 't tìm thấy bất cứ điều gì thông qua tìm kiếm của tôi mà nói với tôi nơi mà có thể cần phải đi cho hội đồng tham chiếu trong COM để nhặt nó lên.

Điều đáng chú ý là trong trường hợp Newtonsoft.Json, hạ cấp xuống 6.0.4 không phải là sửa chữa vì có nhiều tham chiếu đến Json.Net trong các gói khác nhau mà chúng tôi đang sử dụng nên tôi không có quyền để chỉ chọn một phiên bản.

Ngoài ra, trong ứng dụng .Net tester, chúng tôi sử dụng trong quá trình phát triển thư viện, mọi thứ hoạt động như mong đợi và các tham chiếu tự tìm ra để sử dụng đúng phiên bản. Vì vậy, tôi tin rằng tôi cần phải tìm ra cách để nói với COM để tìm thấy những gì nó đang tìm kiếm.

Mọi trợ giúp đều được đánh giá cao! Cảm ơn.

+0

Nếu có bất kỳ điều gì tôi có thể làm để làm rõ câu hỏi, hãy cho tôi biết. –

+0

http://stackoverflow.com/a/38817282/17034 –

+0

@HansPassant Cảm ơn bạn đã liên kết –

Trả lời

0

Một cách giải quyết khác mà tôi tìm thấy cho loại sự cố này là bao gồm tệp cấu hình trong cùng một đường dẫn của tệp thực thi, người gọi mã C#.

Tôi phát hiện ra rằng, nếu tôi tạo một ứng dụng VB6 có tên là "myapp.exe", tôi có thể tạo, trong cùng thư mục "myapp.exe", một tệp văn bản có tên "myapp.exe.config", với nội dung sau:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

Trong trường hợp của bạn, tôi cho rằng tên exe sẽ là "msaccess.exe" hoặc một cái gì đó tương tự.

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