[C#] 2 mal gleiches COM Objekt in verschd. Versionen integrieren

cr4wler

Admiral Special
Mitglied seit
02.09.2003
Beiträge
1.630
Renomée
5
Hey!
Ich hab da gerade ein Problem...
und zwar will ich in einem Testprogramm 2 (gleiche!) COMs in verschd. Versionen einfügen...
Direkt geht natürlich nicht, Module unterstützt Visual Studio nicht, und wenn ich die 2 Programmteile aufteile (eins ins hauptprojekt, eins in ein class library), dann kommt natürlich:
Warning: The dependency 'Interop.foo, Version=4.0.0.0, Culture=neutral' in project 'test' cannot be copied to the run directory because it would overwrite the reference 'Interop.foo, Version=5.0.0.0, Culture=neutral'.

Der Code in der Class Library funktioniert zwar trotzdem "einwandfrei", verwendet aber nur die neuere Version des COMs aus dem Hauptprojekt...

Jemand ne Idee? (evtl. irgdw. in Unterverzeichnisse wurschteln?!)
Fehlen noch Infos?

edit: das class library projekt is als referenzverweis im hauptprojekt eingefügt
 
Zuletzt bearbeitet:
Ich bin mir nicht ganz sicher ob dir das weiter hilft. Aber lies das mal durch.
extern alias
.
EDIT :
.

Dort steht auch genau das beschreieben was du erwähnst, dass nur eine (bei dir die neuere Version) verwendet wird. Da erfolgt eine kopier Operation(replace) der dll.
 
danke schonmal für die antwort, ich glaube aber nicht dass sie mir weiterhilft, weil es in dem beispiel um class libraries geht, ich jedoch ja eigtl. 2 gleichnamige COMs habe.
diese werden ja nicht via using eingebunden...

falls ich etwas falsch verstanden habe, bitte korrigieren:-)
 
hast du das ausprobiert?
also ich meine dass es so funktioniert.
Wieso sollte da ein Unterschied zwischen ClassLibray und COM sein?
Kannst du mir deine COM Classen/Objekte (sonste was) zukommen lassen? (pm)
.
EDIT :
.

Ok ich denke ich habe mir jetzt selber so ein Projekt erstellen können wie du das gemacht hast.
Jedoch komme ich auch zu keiner Lösung. Ich meine sogar dass bei MSDN keine solche Möglichkeit aufgelistet wird.
Vermutlich muss alles kompliziert durch delegierende Funktionen gelöst werden oder vollkommen dynamisch zur Laufzeit eingebunden und abgefragt werden.
Dazu habe ich keinen Bock mehr!
Wenn jemand anders noch was weiß wäre ich auch froh hierüber etwas zu erfahren.
 
hab ganz vergessen zu posten dass ich das problem inzwischen gelöst habe...
in Visual Studio direkt ist es leider nicht möglich, aber man kann die COM-DLLs manuell erstellen, und da auch nicht nur den namen der output-dll bestimmen, sondern auch den namen des namespaces...
dies funktioniert über den .NET type library importer:
tlbimp.exe <com-dll> /out:<output-dll> /namespace:<output-namespace>

jetzt muss man im projekt nur noch die output-dll direkt referenzieren... et voilà,
keine probleme mehr...

edit: http://msdn.microsoft.com/de-de/library/tt0cf3sx(VS.80).aspx
 
Zuletzt bearbeitet:
ja, im endeffekt schon... mein problem war ja, dass ich nicht mal so weit gekommen bin, dass die namespaces in konflikt gekommen wären (hätte man auch über ein separates projekt, dass ich schon angelegt hatte, umgehen können), sondern dass die DLLs gleichnamig waren, und somit das Copy Local natürlich gemeckert hat dass es die DLLs nicht ins Run Dir kopieren kann...
mit dem manuellen erstellen kann man den dateinamen festlegen, und glücklicherweise auch den namespace, so dass ich jetzt alles in einem projekt untergebracht hab.
rein theoretisch müsste man den namespace aber nicht umändern, dann muss man allerdings mit verschd. projekten arbeiten, um verschd. referenzen setzen zu können.
 
Zurück
Oben Unten