Gelöst TargetInvocationException bei AppLibraryCall nach Update auf v8.1

RWill

Neues Mitglied
Hallo zusammen,

ich habe bei einem Kunden eine Erweiterung platziert, welche über einen Kontextmenü-Aufruf mittels AppLibraryCall eine Aktion ausführt. (In diesem Fall das Öffnen eines WPF-Fensters).

In der Version 8.0 läuft diese Erweiterung prima.

Letzte Woche haben wir diesen Kunden auf die Version 8.1 umgestellt. Ich habe die Lösung im AppDesigner erneut eingelesen. Wenn ich nun in der Warenwirtschaft meinen Kontextmenü-Aufruf ausführe, gibt es im TraceLog eine TargetInvocationException, welche besagt, es könne die Assembly oder Klasse nicht gefunden werden.

Zuerst habe ich gedacht, es würde an meiner speziellen Lösung liegen und habe deshalb eine "Testlösung" geschaffen, welche bei Aufruf des Kontextmenü-Eintrags lediglich eine Messagebox öffnen soll.

Code:
namespace ICS.Test_ABC
{
    class TestClass : AppLibraryExecuteBase
    {
        protected override string Execute()
        {
            switch (base.FunctionName)
            {
                case "Test":
                    DoTestOutput();
                    break;
                default:
                    break;
            }

            return string.Empty;
        }

        private void DoTestOutput()
        {
            MessageBox.Show("Testausgabe", "Test", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}


...aber selbst bei dieser Lösung erhalte ich die selbe Exception im TraceLog:

Code:
ExecuteViaRemotingGeneric System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Exception: Assembly oder Klasse nicht gefunden: 'C:\Program Files (x86)\Sage\Sage 100\8.1\Shared\ICS.Test_ABC.dll' - 'ICS.Test_ABC.TestClass'
   bei Sagede.OfficeLine.ControlCenter.Host.ControlCenterHostBase.CallApplicationLibrary(Function func, DataContainer& data, String customParam, Dictionary`2& tarnsferContainer, Object clientLink, Mandant mandant, IRemoteHostPresenterCallback remoteHostPresenterCallback)
   bei Sagede.OfficeLine.ControlCenter.Host.UiIsolation.RemoteHostPresenterBase._Closure$__65-0._Lambda$__0()
   --- Ende der internen Ausnahmestapelüberwachung ---

Ich habe mich schon mehrmals versichert, dass die DLL auch tatsächlich am angegebenen Ort liegt.

(In meiner Testumgebung v8.1 laufen beide Lösungen übrigens problemlos.)


Übersehe ich etwas? Ist dieses Phänomen möglicherweise bekannt?

Ich wäre für Hinweise jeglicher Art sehr dankbar! :)
 
Beim Installationsziel der DLL im AppDesigner ist "Client und Server" ausgewählt.

Bei meinem Test befinde ich mich allerdings schon auf dem Server, da es sich um eine Terminalserver-Installation handelt.
 
Okay, wurde der Applikationsdienst neugestartet? Hast du mal geprüft ob in dem Pfad auf dem Terminalserver die Datei mit entsprechender Version liegt? Evtl. wurde die nicht ausgetauscht?
 
Ja, den Applicationserver habe ich neu gestartet und die DLL befindet sich auch am richtigen Ort in der richtigen Version. Ich habe testhalber die DLL auch schon aus dem Shared-Ordner entfernt, um zu sehen, wie die Reaktion ist. Da bekomme ich, wie erwartet, eine FileIO-Exception, weil er die Datei ja nicht finden kann. Er scheint die DLL also zu finden, kann aber aus mir unersichtlichen Gründen die enthaltene Klasse nicht "finden".
 
Habe das Problem gefunden:

Beim Neu-Kompilieren habe ich versäumt, die Referenzen auf die 8.1 DLLs zu setzen, was zu einer Kaskade von Fehlern geführt hat.

Vielen Dank für die Hilfestellung!
 
Zurück
Oben