2016-08-09 19 views
13

Ich habe ein Szenario wie folgt aus:Referenzen von Referenzen mit COM Anrufer

  1. COM Anruf von einer MS Access-Anwendung mit VBA
  2. Anruf in eine C# -Bibliothek ist, dass wir Gebäude sind, die einen Verweis auf Newtonsoft hat. json v9
  3. Bibliothek nutzt nuget Pakete mit ihrer eigenen Abhängigkeit von Newtonsoft.Json v6 (Say, Microsoft.AspNet.WebApi.Client)
  4. Dependent Bibliothek innerhalb des zusammen sprengen blackbox Code, wenn sie versuchen, Newtonsoft.Json zu verwenden (oder irgendeine Bibliothek, die nicht die gleiche Version wie unsere C# -Bibliothek ist ry verweist)

Fehler:

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. 

ich, dass ich so etwas wie ein dependentAssembly brauchen erwarten Redirect Bindung irgendwo wie das, was Sie in .NET, um anzuzeigen, wie diese Art von Dingen zu lösen, aber ich haven Ich habe durch meine Suche nichts gefunden, das mir sagt, wohin das für die referenzierte Assembly in COM gehen muss, um es abzurufen.

Es ist erwähnenswert, dass im Fall von Newtonsoft.Json, Downgrade auf 6.0.4 ist keine Lösung, da es mehrere Referenzen auf Json.Net innerhalb der verschiedenen Pakete, die wir verwenden, so habe ich nicht die Macht um nur eine Version zu wählen.

Auch in einer .NET-Tester Anwendung haben wir während der Bibliotheksentwicklung alles wie erwartet funktioniert und die Referenzen Abbildung selbst die richtigen Versionen zu verwenden, aus. Ich glaube also, ich muss herausfinden, wie ich COM sagen kann, wonach es sucht.

Jede Hilfe ist willkommen! Vielen Dank.

+0

Wenn es etwas gibt, was ich tun kann, die Frage zu klären, lassen Sie mich wissen. –

+0

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

+0

@HansPassant Danke für den Link –

Antwort

0

Eine Abhilfe, die ich für diese Art von Problem zu finden ist eine Konfigurationsdatei in dem gleichen Pfad der ausführbaren Datei enthält, die den C# -Code nennen.

Ich entdeckte, dass, wenn ich eine VB6-Anwendung namens "myapp.exe" erstellen, konnte ich im selben Ordner von "myapp.exe" eine Textdatei namens "myapp.exe.config" mit dem erstellen folgender Inhalt:

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

In Ihrem Fall, ich glaube, die exe Namen „msaccess.exe“ oder so ähnlich wären.