Hi Leute,
ich arbeite in meinem Projekt mit relativ vielen UserControls. Halt Controls/Views die mehrmals verwendet werden. Teilweise sind in den UserControls auch wieder andere UserControls enthalten (z. B. modifizierte Comboboxen).
Recht häufig bekomme ich folgenden Fehler (beim Erstellen des Builds), obwohl ich meistens gar nichts in dem entsprechenden UserControl oder dessen Basisklasse geändert habe (so wie gerade eben):
Fehlermeldung:
Error 2 Invalid Resx file. Could not load type System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[XXXXXXX, XXXXXXXXX, Version=0.5.0.2, Culture=neutral, PublicKeyToken=96036d4381770532]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 which is used in the .RESX file. Ensure that the necessary references have been added to your project. Line 205, position 5. D:\XXXXXX\Source\XXXXXXXXX\MainApp\Views\Dateizuordnungen\XXX_ViewStandardDateizuordnung.resx 205 5 XXXXXXXXXXXXXXXXXXXXXX
Wenn ich das UserControl dann im Designer öffnen möchte, kommt dieses nette Fenster mit der Überschrift > Fehlermeldung:
To prevent possible data loss before loading the designer, the following errors must be resolved:..........
Im Fehlertext meckert er irgendwelche Klassen an, die angeblich nicht im Projekt enthalten sind. Diese sind aber alle vorhanden und vollkommen funktionsfähig.
Ich habe verschiedene Lösungen bei google gefunden oder teilweise einfach die betroffene Datei aus meiner letzten Sicherung zurückgesichert, aber das ist kein Dauerzustand.
Habt' Ihr Erfahrung mit diesem Bug und wisst vielleicht sogar wie es zu dem Fehler kommt? Ich bin ganz nah dran wieder auf Visual Studio 2010 zurückzugehen, wenn der Fehler weiterhin ständig kommt... Das kann ja nicht Sinn der Sache sein.
Mein Visual Studio 2012 Pro ist auf dem aktuellsten Patch-Stand.
Gruß hypersurf
Hallo hypersurf,
VS hat definitiv ein Problem mit verschachtelten UserControls etc. Irgendwann wirds einfach zuviel für den Designer. Was passiert, wenn du die Datei mal ohne Designer aufmachst?
Nebenbei: Lass den Designer ganz weg.
Erstens: Musst du bei MVVM sowieso irgendwann dein Binding im xaml gestalten. Somit suchst du dein Control, so schön es im Designer aussieht, irgendwann im Xaml. Also gehst du das XAML sowieso durch.
Zweitens: Lernt man XAML und DataBinding im UI so besser.
Drittens: Schreibt man schöneren Xaml-Code. Einfach weil man es dann fast muss 😉
Also: Kommen die gleichen Fehler, wenn du die resx/xaml-File mit einem Text Editor ("with Encoding" oder ähnlich) öffnest?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hi Coffeebean,
danke für Deine Antwort. Ich hatte leider vergessen zu schreiben, dass es sich um ein Windows-Forms-Projekt handelt. Das Problem ist, dass sich das Projekt nicht mehr starten lässt, sobald dieser Fehler auftritt.
Gestern Abend hatte ich diesen Fehler zweimal. Hab' die betroffenen Dateien dann zurückgesichert und danach lief es wieder... Ist aber einfach mega nervig und ziemlich zeitraubend dieser Bug..
Hallo,
.resx Dateien sind xml-Dateien. Vergleich doch mal mit der Versionsverwaltung, wann sich was ändert.
Werde ich beim nächsten Auftreten des Fehlers mal machen.
Vielleicht kann man Visual Studio auch irgendwie dazu bringen, das resx-File neu zu generieren...
VisualStudio schliessen und neu aufmachen löst solche Fehler meistens (jedenfalls bei mir).
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Falls der Ansatz von Programmierhans nicht funktioniert, kannst du das Projekt auch einmal bereinigen und anschließend das VS neustarten.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Das hab' ich bisher immer probiert (Neustarten, Bereinigen und Neustarten), hat aber nie geholfen. Beim nächsten Mal werde ich den XML-Code mal vergleichen.
Hallo hypersurf,
hört sich entfernt nach einem Problem an, das auch in VS2008 und VS2010 existiert.
Kommt vor, wenn man 32 Bit-Programm unter 64 Bit-Windows bauen will.
ResGen.exe error: An attempt was made to load a program with an incorrect format
Wir haben dieses Problem mehrfach und keinen Hinweis, warum es manchmal vorkommt und manchmal nicht.
MS hat dies als Bug bestätigt und es sollte eigentlich in späteren VS als 2010 gefixt werden, aber wer weiss...?
Unser Workaround ist in dem Link beschrieben: Umstellen der Toolchain auf 32 Bit (betrifft v.a. die Modifikation von resgen.exe und Setzen der Umgebungsvariable)
Vielleicht hilfts.
Hallo manfred.baur,
danke für Deine Antwort. Genau das ist der Fall, ich erstelle eine 32-Bit-Anwendung unter Win8 64-Bit. Dann werd' ich den Bug wohl morgen mal an MS melden..
Danke für den Hinweis mit dem Workaround.
Gerade hatte ich das Problem wieder. Neues UserControl erstellt, eingefügt, zack... wieder dieser Fehler. Zum Ausflippen... :evil:
Die UserControls enthalten zum Teil öffentliche Member die als Typ selbstgeschriebene Klassen haben. Ich habe jetzt in allen UserControls vor diese Member folgendes Attribut gesetzt:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Dadurch serialisiert VS diese Eigenschaften nicht mehr und der Fehler ist verschwunden...