Problem mit is Operator
-
Hi zusammen ich habe eine if Abfrage bei der ich den Typ einer eigenen Klasse überprüfen will. Ich schreibe dazu
if (o is Arbeitsgang) cost += ((Arbeitsgang)o).costs;
wobei Arbeitsgang meine besagte Klasse ist. Wenn jetzt aber ein Objekt vom Typ Arbeitsgang kommt, geht er mir trotzdem nicht in die if rein!
Hat einer von euch ne Idee an was das liegen könnte, und wie ich es behebe? Wenn ich was anderes der Klasse abfrage fliegt er mir bei dem cast auf die ***
bringt dann ne Exception unable to cast Arbeitsgang to Arbeitsgang
-
Liegt die Klasse Arbeitsgang bei beider Daten im selben Assembly? Hatte nämlich auch mal viel Spaß mit dem unable to cast gehabt
Greetz
-
Wenn Du mehrere Assemblies hast die interagieren musst Du drauf achten dass alle dieselbe Version der Assembly laden, in der Arbeitsgang definiert ist.
Am besten erreichst Du das indem Du alle Projekte ins selbe Zielverzeichnis builden lässt, und alle Referenzen auf "Copy Local=false" sowie "Specific Version=false" setzt. Beide zusammen sorgen schonmal dafür, dass ein Compilerlauf Dir ne andere Version dieser DLL in den Zielpfad kopiert als der vorherige Compilerlauf geladen/erzeugt/... hat.
-
hab das mit dem alles false und so gemacht jetzt kommt
System.IO.FileNotFoundException was unhandled
Message="Could not load file or assembly 'NetronGraphLib, Version=2.1.2327.27304, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Das System kann die angegebene Datei nicht finden."
Source="TeStSim"
FileName="NetronGraphLib, Version=2.1.2327.27304, Culture=neutral, PublicKeyToken=null"
-
hm ich hab glaub 10 Assemblies *rolleyes*
wie mach ich dass die alle ins selbe Verzeichnis builden??
-
Polofreak schrieb:
hab das mit dem alles false und so gemacht jetzt kommt
System.IO.FileNotFoundException was unhandled
Message="Could not load file or assembly 'NetronGraphLib, Version=2.1.2327.27304, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Das System kann die angegebene Datei nicht finden."
Source="TeStSim"
FileName="NetronGraphLib, Version=2.1.2327.27304, Culture=neutral, PublicKeyToken=null"Sorry hab die Referenzen entfernt und wieder neu eingefügt jetzt geht es wieder hatte nur einen Schreck bekommen, da ich heute noch keine Sicherung gemacht hatte
-
Polofreak schrieb:
hm ich hab glaub 10 Assemblies *rolleyes*
wie mach ich dass die alle ins selbe Verzeichnis builden??rechte Maustaste aufs Projekt und dann unter Build output Directory. Ok tut mir leid.
Jetzt hab ich die Outputs alle in einem Verzeichnis aber
Unable to cast object of type 'Netron.GraphLib.AG.Arbeitsgang' to type 'Netron.GraphLib.AG.Arbeitsgang'.
UNd nu??
-
Prüfe mal ob alle Projekte auf DIESELBE (Pfad!) Netron.Graphlib verweisen. Wenn da unterschiedliche DLLs referenziert werden knallts da gerne. Am Sichersten ist auch diese mit "Specific Version=false" zu markieren, aber wenn sie nicht im Output-Verzeichnis liegt sollte "Copy local=true" bleiben.
Falls diese Netron.Graphlib ein eigenes Projekt ist kann ich nur noch mal fragen geht diese ins selbe Output-Verzeichnis wie der Rest und zieht der Rest die Bibliothek wirklich mit "Copy local=false" und "Specific version=false" rein?
Wir haben auf der Arbeit ein Projekt mit rund 500 DLLs die von VB6 nach VB.NET migriert werden, und wir erfahren gerade genau dasselbe Leid ;), aber mit den o.a. Massnahmen funktioniert es eigentlich inzwischen ganz gut. Zum Glück sind wir ein größeres Team mit vielen Ideen, sonst wäre so manch einer bei uns schon an dem Referenzengewurschtel verendet...
-
also ich hab jetzt so einiges probiert! Aber es will immernoch nicht so wie ich will
Also ich hab bei allen Projektmappen die in meinem Projekt sind (3 Stück) die Outputdirectory auf den gleichen Pfad gelegt. Hab also danach .../bin/ und da dann meine DLLs und das Programm an sich. Dann hab ich alle Referenzen gelöscht und mit diesem neuen Pfad wieder eingefügt. Doch leider noch genau das Problem siehe erster Post
Ich lade eine Lib noch dynamisch zur Laufzeit, aber auch die ist auf diesem Pfad.Achja ich hab natürlich wie von dir empfohle alles auf false gesetzt.
Woran kann es denn noch liegen? Bzw. Was kann ich noch tun, um mein Problem in den Griff zu bekommen??
-
also es scheint ganz sicher das Problem zu sein, denn wenn ich mal alle DLLs lösche und dann nochmal rebuild all mache, dann bringt er mir Fehler über Fehler und erst wenn ich es dann nochmal builde dann klappt es. Nur wo kann ich jetzt da noch was drehen wo läd er denn falsch wie krieg ich das raus??
-
LordJaxom! Ich danke dir!!
AAAAAAAlsooooo!!
wenn man so ein Problem hat wie ich, macht man es so wie es Lordjaxom gesagt hat, nur eines muss man beachten zur sicherheit alle Dlls wech hauen (die hier gebuildet werden!)
Ich fasse die Vorgehensweise nochmal zusammen!!
1. Alle Outputpfade auf den gleichen Outputpfad!
2. Alle dlls einzeln builden (in neuen Output)
3. alte DLLs löschen (dann sieht man am ! schon welche Referenzen erneuert werden müssen)
3. Alle (!) Referenzen löschen
4. Alle Referenzen neu anlegen aus dem neuen Ordner
5. Alle copy local und specific Version auf false==> geht!!!
DANKESCHÖÖÖN
-
hm ich weiß ich nerv! Ich hab mal wieder voreilige Schlüsse gezogen, also in meiner Hauptaplikation geht es, in der Graphlib aber nicht!
Also jetzt mal ganz gediegen, Ich hab drei Projektmappen:
Graphlib (dll)
Referenzen:
TestShapesTestShapes (dll)
Referenzen:
GraphlibTestSim (exe)
Referenzen:
Graphlib
TestshapesSo in der Hauptaplikation geht es aber in Graphlib nicht!
Siehe dazu vielleicht auch nochmal Vererbungsstruktur meiner Shapes
hierKann mir einer sagen wieso? Vielleicht LordJaxom??