none
Ausführungsverzeichnis festlegen RRS feed

  • Frage

  • Ich habe eine Com - Komponente erstellt. Diese wird in einer älteren Applikation vewendet. Ich möchte nun einen anderen Ausführungspfad haben als die der alten Anwendung.  Da der Aktuelle Prozess die ApplicatinBase festlegt muessen nun die dotnet Dll's und die Dll's der alten Anwendung in dem selben Verzeichnis gehalten werden. Dies führt bei Wartungsarbeiten häufiger zu problemen. 

    Ich habe nun eine neue AnwendungsDomain erstellt:

     Dim domaininfo As New AppDomainSetup()
        domaininfo.ApplicationBase = "E:\AppbaseFolder"
        domaininfo.ConfigurationFile = "E:\AppbaseFolder" + "\SubClassIng.exe.config"
        domaininfo.ApplicationName = "SubClassingComInvoker"
        domaininfo.PrivateBinPath = "E:\AppbaseFolder"
         
        _newDomain = AppDomain.CreateDomain("MyDomain", Nothing, domaininfo)
    
        ' Dim Gettype As String = "E:\AppbaseFolder\CommandInvoker.dll"
        Dim _obj As Object = _newDomain.CreateInstanceAndUnwrap(GetType(DotNetConnecor).Assembly.FullName, GetType(DotNetConnecor).FullName)
    

    Nun erhalte ich einen Transparentproxy zurück ( laut Beschreibung hätte ich auf das tatsächliche Objekt gehofft). Leider bin ich nicht in der Lage dieses Object zu casten. Erhalte immer den Fehler TransparentProxy kann nicht in den Typen XY überführt werden.

    Was läuft hier falsch.


    Danke für euer Hilfe

    Wolfram

    Dienstag, 29. Juni 2010 13:35

Antworten

Alle Antworten

  • Hallo Wolfram,

    um allzuviel sagen zu können, ist der Abschnitt zu wenig aussagekräftig.

    Mich irritiert das GetType (DotNetConnecor) bei der Erstellung.
    Damit hast Du auf die eine oder andere Weise bereits einen Verweis auf die Assembly
    in der aktuellen Domain erstellt. Nicht umsonst akzeptiert CreateInstanceAndUnwrap
    nur eine Zeichenkette, da man diesen Verweis gerade nicht hat (haben will) -
    siehe dazu das Hinweis Kästchen dort.

    In Failure to use AppDomain from COM interop , wird ein ähnliches Problem besprochen,
    siehe auch die Links in der Frage.

    Kleiner Nachtrag: Bei Rick Strahl findest Du eine möglich Erklärung für die Ausnahme:
    Assembly Loading across AppDomains

    Gruß Elmar

     

    Mittwoch, 30. Juni 2010 08:27
    Beantworter
  • Hallo Elmar,

    >Mich irritiert das GetType (DotNetConnecor) bei der Erstellung

    Mich auch!! Wenn Ich die Assembly via String ( Fullpath ) z.B. "C:\Folder\Assembly.dll" lade erhalte ich eine Exception Abhängigkeiten nicht gefunden oder Codebase Falsch. Obwohl die Geladene DLL keine abhängigkeiten ausser auf den GAC mit den .net Standard verweisen hat. Also gehe ich davon aus dass die Codebase falsch ist. Nun aber wie setze ich in der COM Componente die korrekte Codebase?

    >In Failure to use AppDomain from COM interop , wird ein ähnliches Problem besprochen,
    siehe auch die Links in der Frage.

    beschreibt ein ähnliches/gleiches Problem. Die Lösung die dort vorgeschlagen wird verstehe ich nicht. Kannst Du mich erleuchten?!

    Den anderen Link lese ich mir noch heute durch.

    Danke

    Wolfram

    Mittwoch, 30. Juni 2010 13:09
  • Hallo Wolfram,

    in .NET werden die Namen von Typen (und Assemblies) anders qualifiziert,
    siehe Angeben vollständig gekennzeichneter Typnamen
    Was die Suchreihenfolge angeht: So sucht Common Language Runtime nach Assemblys

    Die Abhängigkeiten findest Du u. a. so raus, wie es Rick Strahl vormacht.

    Gruß Elmar

    Mittwoch, 30. Juni 2010 14:19
    Beantworter