2016-08-09 31 views
13

Mam scenariusz tak:Referencje Referencje z COM rozmówcy

  1. COM połączeń z poziomu aplikacji MS Access przy użyciu VBA
  2. połączenie jest w C# biblioteki Budujemy który ma odniesienie do Newtonsoft. json v9
  3. Biblioteka używa Nuget paczek z własnym uzależnieniem od Newtonsoft.Json v6 (powiedzmy, Microsoft.AspNet.WebApi.Client)
  4. Dependent biblioteki w jego własnym kodzie Blackbox wysadzić gdy próbują wykorzystać Newtonsoft.Json (lub dowolnej biblioteki, która nie jest tą samą wersją, co nasza libra C# ry jest odwołanie)

Błąd:

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. 

Spodziewam muszę coś jak dependentAssembly przekierować wiążące gdzieś jak co używasz w .NET, aby wskazać, jak rozwiązać tego typu rzeczy, ale raj Znalazłem cokolwiek poprzez moje przeszukiwanie, które mówi mi, gdzie może to wymagać pójścia do zespołu odniesienia w COM, aby go podnieść.

Warto zauważyć, że w przypadku Newtonsoft.Json zmiana na 6.0.4 nie jest poprawką, ponieważ istnieje wiele odniesień do Json.Net w różnych pakietach, których używamy, więc nie mam mocy aby wybrać jedną wersję.

Ponadto, w aplikacji testera .Net, której używaliśmy podczas tworzenia biblioteki, wszystko działa zgodnie z oczekiwaniami, a referencje same wykorzystują odpowiednie wersje. Dlatego uważam, że muszę dowiedzieć się, jak powiedzieć COM, aby znaleźć to, czego szuka.

Każda pomoc jest doceniana! Dzięki.

+0

Jeśli jest coś, co mogę zrobić, aby wyjaśnić pytanie, daj mi znać. –

+0

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

+0

@HansPassant Dzięki za link –

Odpowiedz

0

Jednym z rozwiązań, które znalazłem dla tego rodzaju problemu, jest dołączenie pliku konfiguracyjnego w tej samej ścieżce pliku wykonywalnego, który wywołuje kod C#.

Odkryłem, że jeśli utworzę aplikację VB6 o nazwie "myapp.exe", mogę utworzyć w tym samym folderze "myapp.exe" plik tekstowy o nazwie "myapp.exe.config", z treść:

<?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> 

W twoim przypadku, uważam, że nazwa exe byłaby "msaccess.exe" lub coś w tym stylu.