Laden...

FileLoadException bei Zugreifen per API auf Simulationstool

Erstellt von nullie vor 10 Jahren Letzter Beitrag vor 10 Jahren 4.026 Views
Thema geschlossen
N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren
FileLoadException bei Zugreifen per API auf Simulationstool

Hallo,

ich stehe seit gestern vor folgendem Problem und komme leider nicht weiter:
Ich möchte per API auf ein Simulationstool zugreifen. Dazu programmiere ich vorerst in Visual Studio 2010 und bekomme leider ständig folgende Meldung > Fehlermeldung:

FileLoadException. Die Datei oder Assembly "Implementation.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Der angegebene Pfadname ist ungültig. (Ausnahme von HRESULT: 0x800700A1)

Die Hilfe zu diesem Thema habe ich bereits gelesen; weitergeholfen hat mir diese aber leider nicht...

Laut UserManual muss ich lediglich die Assembly Tecnomatix.Engineering einbinden. Diese ist sicher eingebunden. Von daher ist für mich nicht ganz nachvollziehbar woher dieser Fehler kommt.
Ich muss allerdings zugeben, dass ich von C# wenig Ahnung habe.
Folgenden Code habe ich bisher geschrieben:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tecnomatix.Engineering;

namespace ConsoleApplication1
{
    class Programm
    {
        static void Main (string[] args)
        {
            // Prepare the cylinder creation data
            TxCylinderCreationData cd = new TxCylinderCreationData();
            cd.Name = "myCylinder";
            cd.Base = new TxVector(0, 0, 0);
            cd.Top = new TxVector(0, 0, 300);
            cd.Radius = 100;
            // Get the first item from the selection
            TxObjectList selectedItems = TxApplication.ActiveSelection.GetItems();
            ITxGeometryCreation geoParent = selectedItems[0] as ITxGeometryCreation;

            // If the selected item is of a type under which a geometry can be created
            // (that is, if it implements ITxGeometryCreation), create the cylinder
            // under it.
            if (geoParent != null)
                geoParent.CreateSolidCylinder(cd);
        }        
    }
}


Für Tipps, wo denn der Fehler sein könnte wäre ich euch sehr dankbar.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo nullie,

so wie es aussieht, ist Tecnomatix.Engineering der Namespace, wogegen Implementation.dll die Assembly ist. Zusätzlich zu dem using musst du die Assembly referenzieren. Außerdem muss sich diese im Programmverzeichnis, einen Unterverzeichnis davon oder im GAC befinden.

Siehe auch [FAQ] CS0234 / CS0246 - Der Typ- oder Namespacename "Foo" konnte nicht gefunden werden (analog).

herbivore

N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Hallo herbivore,

vielen Dank schon mal für deine Hilfe. Leider haben sich die Modalitäten etwas geändert. Der Fehler ist zwar der gleiche, dafür kommt eine etwas andere Meldung bei geänderten Rahmenbedingungen.

Ich hatte im UserManual zur Imlementierung der API überlesen, dass die Eigenschaft des Verweises "Tecnomatix.Engineering" auf "False" stehen muss. Dies habe ich jetzt geändert.
Nun erhalte ich folgenden Fehler: > Fehlermeldung:

Die Datei oder Assembly "Tecnomatix.Engineering, Version=11.0.0.440, Culture=neutral, PublicKeyToken=null" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Das Verzeichnis ist sicher das richtige.. Ich habe Leserechte für das Verzeichnis.
Zusätzlich habe ich jetzt unter Projekt - Projekteigenschaften noch den Ordner von Tecnomatix als Verweispfad angegeben.
Wo könnte da denn noch der Fehler liegen? Bin grad ziemlich ratlos...

Nullie

P
660 Beiträge seit 2008
vor 10 Jahren

hallo,

Kompilierst du für x86 oder AnyCPU? stell einfach mal um auf x86

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Hey,

ich kompiliere für x64, da Tecnomatix nur als 64bit-Version vorliegt.
Wenn ich auf x86 umstelle erscheint die genannte Fehlermeldung weiterhin und darüber hinaus erscheinen noch weitere Fehlermeldungen weil Tecnomatix 64bit ist.

16.841 Beiträge seit 2008
vor 10 Jahren

Trotzdem sagt die Fehlermeldung sehr deutlich, dass entweder die vorhandene Version oder ganz einfach der zu suchende Pfad nicht stimmt; oder eben eine Abhängigkeit, die Dir fehlt.
Kann man mit dem Process Explorer verfolgen.

N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Hmm,

Version und Pfad stimmen. Hab ich auch schon mehrfach überprüft und sogar schon paar mal neu eingebunden.
Über den Projektmappen-Explorer komme ich auch zum Objektkatalog der Assembly.

Ist PublicKeyToken vielleicht aus irgendeinem Grund nicht Null und die Meldung erscheint deswegen?
Ich habe Tecnomatix während dem kompilieren geöffnet. Wobei ich auch keine Besserung feststellen kann, wenn ich Tecnomatix schließe.

4.221 Beiträge seit 2005
vor 10 Jahren

Entweder liegt die Tecnomatix.Engineering dll nicht in der richtigen Version im Verzeichnis ( Version=11.0.0.440 )... oder diese dll verwendet noch weitere Dll's welche nicht gefunden werden !

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

An der Version kanns doch eigentlich nicht liegen oder? Ich habe doch den Verweis in Visual Studio gesetzt. Und unter den Verweis-Eigenschaften wird mir Version 11.0.0.440 angezeigt.

Diese dll verwendet ziemlich viele, weitere dll´s. Aber diese liegen alle in dem gleichen Verzeichnis. Und ich habe die beiden dll´s, auf die ich verweisen muss eingebunden.

Ich habe gerade folgendes gelesen:

Zur Laufzeit muss ein Verweis **entweder im Globaler Assemblycache (GAC) oder im Ausgabepfad **des Projekts vorhanden sein. Wenn diese Eigenschaft auf true festgelegt wurde, wird der Verweis zur Laufzeit in den Ausgabepfad des Projekts kopiert. Gewusst wie: Festlegen der Eigenschaft Lokale Kopie eines Verweises

Da ich CopyLocal auf False stehen habe, und sich die Assembly auch nicht im Globalen Assemblychache befindet wird die Fehlermeldung erzeugt.
Also so ist meine Vermutung. Ergibt dass Sinn? Wenn ja, wie gehe ich dann weiter vor?

16.841 Beiträge seit 2008
vor 10 Jahren

Deswegen haben wir 7374324 mal gesagt, dass die DLL im Anwendungsverzeichnis liegen muss (und das steht auch in der FAQ).
Wenn Du das ganze auf False setzt, dann wird die DLL natürlich nicht kopiert. Ergo liegt die DLL auch nicht im Anwendungsverzeichnis - und genau das sagt auch der Fehler aus.

Wie wärs also damit, CopyLocal auf true zu setzen? Wär ne feine Idee, wa? 🤔

N
nullie Themenstarter:in
6 Beiträge seit 2013
vor 10 Jahren

Nein, weil ich dann wieder bei der, im ersten Tread genannten Fehlermeldung ankomme.
Dadurch, dass ich CopyLocal auf "False" gesetzt habe, hat sich ja nur die Fehlermeldung geändert.
Soeben nochmal versucht - und wie erwartet:> Fehlermeldung:

Die Datei oder Assembly "Implementation.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Der angegebene Pfadname ist ungültig. (Ausnahme von HRESULT: 0x800700A1)

Und im UserManual steht doch explizit, dass CopyLocal auf "False" stehen muss...

4.221 Beiträge seit 2005
vor 10 Jahren

Hat Siemens auch Beispiel-Projekte mitgeliefert ?

Funktionieren diese auf Deinem Rechner ? Wenn Diese funzen, dann machst Du was falsch und kannst in diesen Projekten schauen was wie referenziert wird....

Wenn diese nicht funzen, dann liegt es an der Installation...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

Hinweis von herbivore vor 10 Jahren

Es ist immer schade, wenn die Hinweise nicht richtig gelesen wurden. Dass die DLL im Anwendungsverzeichnis liegen muss, habe ich schon in der aller ersten Antwort geschrieben. Ich hatte von Anfang an die Vermutung, dass der Thread unter Grundlagen fällt. Das hat sich nun bestätigt. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Zudem wurde alles relevante gesagt. Auch wenn in der Doku der DLL steht, dass CopyLocal auf "False" stehen muss, setzt das nicht die Regeln des Frameworks außer Kraft. Die DLL muss sich an einem der genannten Orte befinden.

Thema geschlossen