Laden...

[erledigt] Could not load file or assembly

Letzter Beitrag vor 15 Jahren 22 Posts 6.832 Views
[erledigt] Could not load file or assembly

Ich bekomme ständig diese Fehlermeldung, kann mir vl jemand sagen warum?


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Eplan.EplApi.System;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.Base;

namespace WinEplanTest
{
    public partial class Form1 : Form
    {      


            private Eplan.EplApi.System.EplApplication m_oEplApp;
        
        
            //string m_strTemplateProjectName  =  "";
            //string m_strNewProjectName       =  "";

        

            public Form1()
            {
               //
               // Required for Windows Form Designer support
               //
               InitializeComponent();

               using (LockingStep ls1 = new LockingStep())
               {
                   m_oEplApp = new Eplan.EplApi.System.EplApplication();

                   System.String strAppModifier = "";
                   m_oEplApp.Init(strAppModifier);
                }
            }



danke
lg

Hallo,

zunächst einmal die dringende Bitte, Code als solchen zu markieren - das liest sich erheblich besser. Siehe Wie poste ich richtig? Punkt 5 Danke!

Dann wäre es auch sehr hilfreich zu wissen, unter welchen Umständen die Fehlermeldung kommt und welche Informationen dazu angegeben werden. (NET-Meldungen sind meistens erheblich ausführlicher als Dein kurzer Hinweis.) Vielleicht verweisen die Referenzen nicht auf den richtigen Pfad oder die richtige Version oder was auch immer.

Jürgen

Soda ja werd ich mir fürs nächste mal merken.

also die Fehlermeldung wäre:

Could not load file or assembly 'Eplan.EplApi.DataModelu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57aaa27e22f7b107' or one of its dependencies. Exception from HRESULT: 0xE06D7363

bzw Stacktrace:

at WinEplanTest.Form1.createEplanPrj()
at WinEplanTest.Form1.btnCreatePrj_Click(Object sender, EventArgs e) in D:\C# projects\test\WinEplanTest\WinEplanTest\Form1.cs:line 87
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms. UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at WinEplanTest.Program.Main() in D:\C# projects\test\WinEplanTest\WinEplanTest\Program.cs:line 19
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Ja programmierumstände wären VS 2005 C# und Eplan P8

Vielleicht blöde Frage, aber hast du in deinem Projekt einen Verweis auf die Eplan-Assembly gesetzt bzw. ist diese im GAC installiert? Wäre jetzt des erste was mir da einfällt...

Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁


[URL]XING-Profil[/URL]

Soda ja werd ich mir fürs nächste mal merken. Bitte nicht erst beim nächsten Mal: Du kannst Deinen ersten Beitrag durch "editieren" noch lesbar gestalten. Danke!

also die Fehlermeldung wäre:

Danke, so wollte ich es lesen.

Ja programmierumstände wären VS 2005 C# und Eplan P8

Das reicht noch nicht als Auskunft: Beim Wechsel von der Code-Anzeige in den Designer oder beim Programmstart oder zur Laufzeit in irgendeiner Situation oder ...?

Wenn es um den Programmstart geht, ist FusionLogView hilfreich; das sagt genauer, welche Assembly von welcher vergeblich aufgerufen wird.

Jürgen

Ja das mit den GAC wäre anscheinend auch möglich da ich die Assemblys nicht im assembly ordner C:\WINDOWS\assembly aufscheinen, aber wie bekomme ich die assembly dateien in diesen Ordner?

und zur anderen Frage, das Coding selbst ist fehlerfrei, nur sobald er im programm zu


 m_oEplApp = new Eplan.EplApi.System.EplApplication();

kommt, kommt eben diese Fehlermeldung. Also Sobald er es Initialisieren will direkt nach dem Programmstart

Nur noch zur Info, es gibt dieses Programm auch als Programmbeispiel in der Hilfe und es sollte auch so funktionieren, aber das tut es eben nicht.

Für das Installieren eines Assembly in den GAC benutzt du das Tool "gacutil.exe" aus dem Framework-SDK. Benutzungshinweise stehen in der MSDN-Doku. Ob damit das Problem gelöst wird weiß ich nicht, da ich mich mit Eplan nicht auskenne, aber die Fehlermeldung sieht sehr nach einer fehlenden Referenz oder einem nicht-existierenden GAC-Verweis aus.

Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁


[URL]XING-Profil[/URL]

Du wirst wohl wirklich erst mit FUSLOGVW.exe im Verzeichnis (NET_SDK)\v2.0\Bin\ fündig, Erläuterungen dazu siehe :rtfm:

Jürgen

Also das mit gacutil habe ich gemacht doch die Fehlermeldung kommt trotzdem noch...

Werde es mal mit FUSLOGVW.exe probieren, bzw. was macht das genau?

So nach ausführen des FUSLOGVW.exe wird nichts angezeit, es öffnet sich nur Assembly Binding log viewer ohne Eintrag...

Assembly Binding Log Viewer-Tool

Zitat: "Im Assembly Binding Log Viewer-Tool werden Details zu Assemblybindungen angezeigt. Mit diesen Informationen lässt sich leichter diagnostizieren, weshalb zur Laufzeit in .NET Framework keine Assembly gefunden werden kann."

Also ein wenig selbst musst du schon tun, wir können das Programm ja nicht für dich bedienen 😉

Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁


[URL]XING-Profil[/URL]

ja sry hab ich mittlerweile auch schon nachgelesen, aber trortzdem zeigt auch dieses Programm mir keine Fehler an.

Kann es möglich sein, dass einfach die mitgelieferten Assemblys von Eplan fehlerhaft sind? Ich kann sie problemlass ins Projekt einbinden unter Add References und auch die spezifischen Methoden in den Code einbinden, nur er lässt auch kompilieren, nur sofort nach dem initialisieren bricht das Programm eben mit der Fehlermeldung ab.

?

Anscheinend benötigte das Programm einige zeit

Hier nun das LogFile vom FUSLOGVW.exe auf die Assembly

*** Assembly Binder Log Entry (15.01.2009 @ 14:16:05) ***

The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.

Assembly manager loaded from: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable D:\C# projects\test\WinEplanTest\WinEplanTest\bin\Debug\WinEplanTest.exe
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: User = AUTFORCE\patrick.schadler
LOG: DisplayName = Eplan.EplApi.DataModelu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57aaa27e22f7b107
(Fully-specified)
LOG: Appbase = file:///D:/C# projects/test/WinEplanTest/WinEplanTest/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = WinEplanTest.exe
Calling assembly : WinEplanTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: Eplan.EplApi.DataModelu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57aaa27e22f7b107
LOG: Found assembly by looking in the GAC.
LOG: Binding succeeds. Returns assembly from C:\WINDOWS\assembly\GAC_32\Eplan.EplApi.DataModelu\ 1.0.0.0__57aaa27e22f7b107\Eplan.EplApi.DataModelu.dll.
LOG: Assembly is loaded in default load context.

Nur ganz versteh ich nicht was er mir sagen will

Bitte beachte

Could not load file or assembly 'Eplan.EplApi.DataModelu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57aaa27e22f7b107' or one of its dependencies

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

Laut Dependency Walker müssten alle dependencies richtig sein, nachdem amAnfang des projektes auch hier einige Fehlermeldungen kamen wurden diese dlls nachträglich hinzugefügt und jetzt schein alles in Ordnung zu sein, es kommt nur wenn man

depends Eplan.EplApi.DataModelu.dll

ausführt folgendes:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

Und diese Warnungen sind laut Internetsuche relativ vernachlässigbar

Ähm, blöde Frage: Heisst es nicht evtl. DataModule anstatt DataModelu?

Nein das heisst wirklich Datamodelu, keine Ahnung warum aber es werden alle eingebunden dll mit u am Ende angezeigt

Hat sich schon erledigt!

Lösung: Man muss explizit im unter Propertier-->Debug--->Das Working directory auf den Eplan BIN Ordner setzten damit er anscheinend alles laden kann!!!

Hallo jaensen,

kann auch "Data Model U" bedeuten 😉

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Stichwort App.Config + Probing

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

Hallo Patzi...
Ist ja lustig, gibt offensichtlich noch Andere, die sich mit Eplan rumquälen...
Ich habe ein ähnliches Problem was bei mir aus einem Excel-Addin entsteht.
Offensichtlich hat Excel es nicht nötig das Arbeitsverzeichnis zu verwenden bzw. macht trotz anders lautender Einstellungen noch eigene Kopien der Assemblys.

Jetzt hat Eplan den Lösungsvorschlag die machine.config aus .NET2.0 so zu ändern, dass die Assemblies richtig geladen werden.

Kann ich die machine.config auch programmatisch ändern? Ich finde das eigentlich etwas unelegant.

Die zweite Alternative war ein zweites exe zu erstellen, dass im Grunde losgelöst von Excel die Eplan API verwendet.
Aber ich hab ehrlich gesagt keine Ahnung wie ich das anstellen muss...
Kann mir dazu jemand einen Tipp geben?

Danke
Carsten

Eine seperate "Exe" brauchst du nicht. Dafür gibts AppDomain. Über die Klasse AppDomainSetup kannst du dir eine AppDomain nach belieben zusammen bauen.

Zur weiteren Verwendung der AppDomain, schau dir am besten [FAQ] Eigene Anwendung pluginfähig machen an (Stichwort Remoting).

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...