Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Abhängigkeiten finden (https://www.delphipraxis.net/79261-abhaengigkeiten-finden.html)

Luckie 19. Okt 2006 10:03


Abhängigkeiten finden
 
Ich benutze eine aus java Code erstellte .NET Assembly. Wenn ich die Anwendung ausführe, bekomm eich folgende Exception:
Zitat:

Die Datei oder Assembly hib3test2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
So nützt mir diese Meldung recht wenig. Kann ich irgendwie rausbekommen, welche Abhängigkeit er nicht findet? Die fragliche Assembly liegt im Anwendungsverzeichnis, sollte er also finden und es sollte an einer Abhängigkeit liegen.

Khabarakh 19. Okt 2006 10:37

Re: Abhängigkeiten finden
 
Das ist per Reflection.Assembly möglich, allerdings ersparen dir viele Tools das Selbstschreiben. Ein schon im SDK enthaltenes wäre IL-Dasm, was aber nicht einmal halb so schön ist wie Lutz Roeders Reflector ;) .

Luckie 19. Okt 2006 10:58

Re: Abhängigkeiten finden
 
Code:
- hib3test2
   Depends On
      IKVM.GNU.Classpath
      IKVM.Runtime
      mscorlib
      mscorlib
Bis auf die mscorlib liegen auch alle dateien im Anwendungsverzeichnis. :gruebel:

Jürgen Thomas 19. Okt 2006 11:08

Re: Abhängigkeiten finden
 
Das NET-Tool FusionLogView - zu finden unter (InstallPfad)\v2.0\Bin\FUSLOGVW.exe - zeigt im Detail, welche Assembly mit welcher Version (einschl. PublicKeyToken) wo gesucht wird und bei welcher Assembly es scheitert.

Danach hilft Roeder's Reflector, um die richtigen Versionen festzustellen.

Gruß Jürgen

Luckie 19. Okt 2006 11:12

Re: Abhängigkeiten finden
 
Hm, wie benutze ich das Programm FUSLOGVW? Wenn ich das laufen habe und starte meine Anwendung und führe den Code aus, der die Exception verursacht (Die abgefangen wird.) passiert da irgendwie nichts.

Jürgen Thomas 19. Okt 2006 11:16

Re: Abhängigkeiten finden
 
Zitat:

Zitat von Luckie
Hm, wie benutze ich das Programm FUSLOGVW? Wenn ich das laufen habe und starte meine Anwendung und führe den Code aus, der die Exception verursacht (Die abgefangen wird.) passiert da irgendwie nichts.

Ich weiß, das verhält sich etwas seltsam (deshalb meide ich es, aber manchmal muss es sein). Du musst zuerst FUSLOGVW starten, dann Deine Anwendung starten, zwischendurch FUSLOGVW aktualisieren; danach erhältst Du mit Doppelklick auf eine passende Zeile - die auf Deine Anwendung hinweist - das Zugriffsprotokoll.

Gruß Jürgen

PS. nur aus der Erinnerung heraus beschrieben

Luckie 19. Okt 2006 11:21

Re: Abhängigkeiten finden
 
So habe ich es gemacht. Aber ich sehe da trotzdem nichts. Egal, ob ich das programm aus dem VS starte oder direkt die Exe aus dem Debug-Ordner. :gruebel:

Jürgen Thomas 19. Okt 2006 11:31

Re: Abhängigkeiten finden
 
Zitat:

Zitat von Luckie
So habe ich es gemacht. Aber ich sehe da trotzdem nichts. Egal, ob ich das programm aus dem VS starte oder direkt die Exe aus dem Debug-Ordner. :gruebel:

Also ich habe es jetzt schnell mal gestartet:
  • FUSLOGVW gestartet
  • eigenes Programm gestartet
  • Zeile im großen Fenster markiert, nämlich mit Programmnamen in der ersten Spalte und aktuelle Zeit in der dritten Spalte
  • Button 'Protokoll anzeigen'
Alles wird angezeigt wie gewünscht. Jürgen

Luckie 19. Okt 2006 11:36

Re: Abhängigkeiten finden
 
Ich starte auch zu erst FUSLOGVW. dann meine Anwendung. Dann klicke ich in FUSLOGVW auf "Refresh". Der Listview ist immer noch leer. Dann klicke ich auf den Button in meiner Anwendung, der den Fehler auslöst. FUSLOGVW ist immer noch leer. Auch ein Klicken auf "Refresh" ändert nichts daran.

Ich habe hie rübrigens nur Version v1.1

Jürgen Thomas 19. Okt 2006 12:12

Re: Abhängigkeiten finden
 
Ich habe jetzt bei mir eine Exe für NET 1.1 gesucht und gestartet. Gleicher Verlauf, gleiches Ergebnis:
  • FUSLOGVW von 1.1 gestartet
  • eigenes Programm gestartet
  • Refresh - danach kamen bei mir alle Anzeigen
  • Zeile im großen Fenster markiert, nämlich mit Programmnamen in der ersten Spalte und aktuelle Zeit in der dritten Spalte
  • Button 'Protokoll anzeigen' bzw. 'View Log'
Alles wird angezeigt wie gewünscht. Jürgen

Die Anzeige benutzt übrigens den Internet Explorer.

Khabarakh 19. Okt 2006 12:19

Re: Abhängigkeiten finden
 
Normalerweise sollte es auch genügen, Fusiondingens nach dem Beenden des Programmes zu starten. Und wenn es partout nicht will, kannst du ja wenigstens einmal (sofern du es nicht schon getan hast ;) ) die vom Reflector ausgespuckten Versionen mit denen der Assemblys im Verzeichnis vergleichen. Besonders eine zweifach eingebundene CoreLib kommt mir etwas spanisch vor :gruebel: .

Luckie 19. Okt 2006 12:23

Re: Abhängigkeiten finden
 
Standardbrowser ist hier der Firefox. Der IE ist aber installiert. Komisch. :gruebel:

@Khabarakh: Ja das kommt mir auch komisch vor. Wenn ich bei beiden mscorlib "Go to member" anklicke, springt er rechts in den Treeview zum Eintrag "mscorlib":
Code:
// Assembly mscorlib, Version 2.0.0.0

 
Location: %SystemRoot%\Microsoft.net\Framework\v2.0.50727\mscorlib.dll
Name: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
Type: Library

Khabarakh 19. Okt 2006 13:02

Re: Abhängigkeiten finden
 
FusionLogViewer benutzt den Standardbrowser, wär ja schlimm wenn nicht :stupid: .


Zitat:

Zitat von Luckie
Code:
// Assembly mscorlib, Version 2.0.0.0

 
Location: %SystemRoot%\Microsoft.net\Framework\v2.0.50727\mscorlib.dll
Name: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
Type: Library

2.0 in 1.1 :gruebel: ? Das wäre wirklich seltsam, allerdings schickt dich Reflector wahrscheinlich zum falschen Eintrag. Schau mal im linken Treeview nach - Deine Assembly -> Dein Modul (höchstwahrscheinlich gleichnamig) -> References -> mscorlib, dann im unteren Infofenster. Oder eben in IL-Dasm:
Code:
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                        // .z\V.4..
  .ver 1:0:5000:0
}

Luckie 19. Okt 2006 13:06

Re: Abhängigkeiten finden
 
Aha. Unter: hib3test2/References ist die mscorlib auch zweimal aufgeführt. Einmal als version 1.0.5000.0 und einmal als version 2.0.0.0.

Und nu? :shock:

Khabarakh 19. Okt 2006 14:33

Re: Abhängigkeiten finden
 
Hm, gute Frage :mrgreen: .

Die Assembly ist von diesem ikvmc erstellt worden? Dann könnte ich mir höchstens noch vorstellen, dass du mscorlib per -reference-Parameter angegeben hast und der Compiler sie gleichzeitig implizit eingebunden hat. Ansonsten wirds langsam wirklich haarig :stupid: .

Luckie 19. Okt 2006 14:36

Re: Abhängigkeiten finden
 
Ok, da werde ich morgen mal meinen Chef fragen, wie er die erstellt hat. Die ist nämlich von ihm.

Luckie 26. Okt 2006 09:23

Re: Abhängigkeiten finden
 
So, in der Assembly ist jetzt die mscorlib nur einmal drinne nach dem ich sie auf meinem Rechner erzeugt habe. Eingebunden ist die Version 2.0.0.0 aus: %SystemRoot%\Microsoft.net\Framework\v2.0.50727\ms corlib.dll

Der Fehler ist allerdings der gleiche und das Problem mit der FUSLOGVW.exe besteht weiterhin. :gruebel:

Luckie 31. Okt 2006 10:37

Re: Abhängigkeiten finden
 
Ich bin wieder an dem Problem dran. also wen ich das BDS starte, dann zeigt mir FUSLOGVW.exe was alles geladen wird. Strate ich aber ein .NET Programm (in C#) von mir, egal welches, wird mir nichts angezeigt. Müssen da eventuell noch spezielle Debug-Informationen rei, die beim Erstellen der Debug-Version noch nicht mit drinne sind?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz