ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
1015
1015
EMPFEHLEN
-
So - ich mal wieder :/
Die Resourcen lassen mich einfach nicht los.
Folgendes habe ich gemacht:
sind erstellt und werden auch eingebunden.Code :1 2
Locale.resx Locale.de.resx
Obiges ist auch 1:1 aus einem MSDN Beispiel übernommen.Code :1 2
Thread::CurrentThread->CurrentCulture = gcnew CultureInfo(Name); ResMan = gcnew ResourceManager("Client.Locale", Assembly::GetExecutingAssembly());
Code :1
MessageBox::Show(LocalManager::ResMan->GetString("TestString"));
Der Spass ist, ich bekomme gleich bei Programmstart eine System.IO.FileLoadException (erste Chance). Die wird natürlich schon von der Runtime abgefangen und somit falle ich eben immer auf die eingebettete (englische) Sprachresource zurück. Die Exception kommt bei jedem Durchlauf des obigen Codes.
Die Namen der Dateien sind wohl richtig, denn FxCop zeigt, dass alles richtig eingebunden wurde. Strong Names sind auch in Ordnung und richtig signiert.
Sicherheitshalber habe ich es schon komplett ohne Keys versucht, aber auch das macht keinen Unterschied.
Was übersehe ich da? Weiss das vielleicht jemand?
P.S.: Interessant ist zumindest folgendes: Vorher habe ich ja keine .resx Dateien verwendet und meine .txt Dateien mittels resgen in .resources überführt. Dort gab es zumindest einen Namensunterschied: "Client.Locale" war dann einfach nur "Locale". Aber das dürfte wohl nichts mit dem Fehler zu tun haben (vor allem bekäme ich, würden die Namen nun falsch sein, eine MissingManifest...Exception).Einen schönen Tag noch,
Macan
-
Hi Markus!
Versuch das ganze mal so:
Wenn es nun klappt, hast einen Fehler in dem "Client.Locale" String drinne. Oder es war nicht die richtige Assembly.Code cpp:1
gcnew ResourceManager( __typeof(Locale)->FullName, __typeof(Locale)->Assembly );
Btw. wenn Du Application.Run in einem try-catch-Block ausführst, bekommst auch die Zeile
und kannst evtl auch noch eine InnerException auslesen....Geändert von Christian Kusmanow (23.11.06 um 09:18 Uhr)
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo Christian

Gut - mach ich sofort.Versuch das ganze mal so:
Das hat witzigerweise nicht funktioniert - bin überfragt, warum. Vielleicht, weil ich kein Form, sondern einen ApplicationContext starte.Btw. wenn Du Application.Run in einem try-catch-Block ausführst, bekommst auch die Zeile
und kannst evtl auch noch eine InnerException auslesen....Einen schönen Tag noch,
Macan
-
Warum ein ApplicationContext? Hast Du vor das Form deiner Anwendung auszutauschen?
Ansonsten würd ich für das eigentliche Programm noch eine Klasse definieren.
Wenn Du schon innerhalb der MainMethode oder in der Klasse die die MainMethode enhält,
auf Namespaces deiner Anwendung zugreifst, bekommst immer einen Laufzeitfehler.Geändert von Christian Kusmanow (21.11.06 um 15:20 Uhr)
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Genau. Ich habe da mehrere Forms und will nicht immer alles mit Update() aktualisieren lassen. Die Klasse habe ich auch geschrieben und von ApplicationContext abgeleitet. Funktioniert alles und nur in dieser Klasse arbeite ich eigentlich wirklich (mit namespaces).Warum ein ApplicationContext? Hast Du vor das Form deiner Anwendung auszutauschen?
Ansonsten würd ich für das eigentliche Programm noch eine Klasse definieren.
Mit diesem typeof (in C++ ist das wohl typeid oder einfach GetType()) kann ich nicht wirklich etwas anfangen. Sprich, ich kann das nicht in C++ übersetzen (finde da FullName, etc. einfach nicht).
Und... nur mal zur Sicherheit:
So sieht mein catch aus. Aber vielleicht bin ich da auf dem falschen Dampfer damit.Code :1 2 3 4 5 6 7
Context^ App = gcnew Context; try { Application::Run(App);} catch (System::Exception^ e) { MessageBox::Show(e->InnerException->Message); }Einen schönen Tag noch,
Macan
-
Ja, hast recht. Hab mal auf der MSDN nachgeschaut. __typeof währe dazu sicher das Equivalent dazu in c++.
GetType() macht aber das gleiche...
Nein, bist nicht. Aber Du gibst die Exception ansich gar ned aus.
Eine InnerException ist auch nicht immer verfügbar. D. h. dass es einen zu einer NullReferenceException kommen kann,
wenn Du versuchst auf die InnerException->Message zuzugreifen.
Prüfe daher ob die InnerException nicht null ist und gib sie dann erst mit aus.MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Das habe ich nur schnell noch einmal reingetippt. Das Problem ist, dass die MessageBox sich nicht zeigt. Genauso läuft es auch, wenn ich die Zuweisung des ResourceManagers und die GetString() Methode catche - alle Fehler werden wohl schon intern abgefangen und erreichen mich überhaupt nicht:
ist alles, was ich zu sehen bekomme (im Ausgabefenster).Eine Ausnahme (erste Chance) des Typs "System.IO.FileLoadException" ist in mscorlib.dll aufgetreten.
Würde ich nun ein Namensproblem haben, dann kommt sofort ein Ausnahmefenster.
EDIT: Aber es ist gut zu wissen, immer erst die Existenz der InnerException zu prüfen
Noch einmal EDIT: Ich weiss einfach nicht, wie ich den Type von "Locale" bekomme, denn das ist ja keine Klasse, Typ, etc. Oder sehe ich das falsch? (Ist ja nur ein String, der übergeben wird).
Jetzt aber - letzter EDIT: __typeof ist die alte Notation. typeid müsste es dann sein. Aber weder mit GetType, noch mit typeid bekomme ich solch ein Konstrukt hin (mit Fullname, etc.).Geändert von Macan (21.11.06 um 16:16 Uhr)
Einen schönen Tag noch,
Macan
-
Wann und wo wird der ResourceManager instanziert?
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hmmm, das könnte vielleicht das Problem sein. Der ResourceManager wird in einer Init-Methode, die gleich am Anfang im Konstruktor der LocaleResourcen-Klasse aufgerufen wird, instantiiert (also mehr oder weniger, denn... static ResMan).
Dann wird diese Init-Methode bei Sprachwechsel wieder aufgerufen (und auch dann kommt immer die FileLoadException).
Ich habe ResMan auch schon nonstatic versucht - macht keinen Unterschied (aber vielleicht hatte ich da auch noch andere Fehler dabei).
Du wirst mir jetzt sicher gleich sagen, dass static das Problem ist, weil dadurch das Object nicht neu instantiiert werden kann? *g*
EDIT: Noch etwas witziges: Wenn ich etwas in den .resx Dateien verändere, dann kommt beim nächsten Start z.B. nur die deutsche Resource... dann beim nächsten Start wieder nur die englische...Einen schönen Tag noch,
Macan
-
__typeof muss aber laut der MSDN existieren.
http://msdn.microsoft.com/library/de...mxkeywords.asp
Mach einen trockenen Test diesbezüglich. Du weisst das ich habe keine großartige Ahnung von c++ habe.
Teste den Kram plain nur so kommst dem Fehler selber auf die Spur.MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Das ja, nur muss ich da noch etwas beachten, wenn ich die alte Notation verwenden will. Wie gesagt, Reflection ist noch ein Buch mit sieben Siegeln für mich__typeof muss aber laut der MSDN existieren.

Frei nach Deiner Signatur:
Ich weiss noch nicht einmal, dass ich ein Problem mit irgend etwas habe
Gut - das mache ich. Trockenschwimmen quasiTeste den Kram plain nur so kommst dem Fehler selber auf die Spur.
Danke für Deine Geduld
Einen schönen Tag noch,
Macan
-
Tatsache

Leeres Projekt und es funktioniert genau so.
Ich danke Dir
Einen schönen Tag noch,
Macan
-
Noch ein letztes Wort dazu. Nachdem ich mir sicher sein konnte, dass alles richtig ist (gut, den ResourceManager muss man nur einmal instantiieren), habe ich ein neues Projekt erstellt, alle .h und .cpp Dateien wieder eingegliedert... und nun funktioniert es.
Scheint wohl ein internes Problem gewesen zu sein.Einen schönen Tag noch,
Macan
-
Schätze mal es lag an den Projekteinstellungen.
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Entweder das (wobei ich, meines Wissens nach, nichts umgestellt hatte). Zumindest lag in meinem Projekt noch ein zusätzlicher Ordner (Filter mit Namen "zusätzliche Dateien" oder so ähnlich). Dieser Filter war ausgegraut, also nicht zugänglich. Ich denke mal, dass sich dieser und weitere Probleme bei einem Neustart (VS meldete einen Fehler und startete sich neu) ergeben haben.
Also als Tipp an alle - wenn etwas funktionieren sollte, sich jedoch partout weigert - Projekt säubern (hat bei mir jedoch nicht geholfen) oder eben gleich ein neues Projekt erstellen und alle Dateien wieder eingliedern.
Interessant ist eines noch:
Wenn ich mein Projekt neu compiliere, dann kommt immer mal wieder besagte FileLoadException (auch, wenn ich die Projektmappe neu erstelle). Zweimal neu erstellen - und der Fehler ist immer weg.Einen schönen Tag noch,
Macan
Ähnliche Themen
-
Werte in .resx Dateien als Variablen behandeln
Von Macan im Forum .NET CaféAntworten: 0Letzter Beitrag: 15.04.07, 21:14 -
Lokalisierung .resx oder .resources - Komplexe Grundsatzfrage zur Lokalisierung
Von Macan im Forum .NET Application und Service DesignAntworten: 13Letzter Beitrag: 08.11.06, 14:14 -
Wie kann man resx-Datei in ASP.NET lesen?
Von Yujun im Forum .NET ArchivAntworten: 0Letzter Beitrag: 15.06.05, 16:08





Zitieren
Login





