Ressourcen in Projektdatei in VS2008 werden „wiederverwendet“ kreativ durch die Formular-Designer möglich zu vermeiden?

StackOverflow https://stackoverflow.com/questions/435466

Frage

Wir haben einige automatisch generierte Ressourcendateien in unserem Projekt in Visual Studio 2008, mit einigen lokalisierten Versionen und in einen dieser lokalisierten Versionen gibt es eine Zeichenkette, die in diesem Fall leer ist.

Mehr explizit. Wir haben eine Kern-Ressource-Datei, mit vielen String-Ressourcen. Wir haben dann 4 weitere lokalisierte Versionen von thisfile, und in einer dieser anderen lokalisierten Dateien, eine der Saiten wird einen leeren Wert angegeben.

Das Problem ist nun, dass die Formular-Designer ganz glücklich sind über eine Ressource für eine Zeichenfolge gefunden zu haben, und werden offenbar vor nichts zurückschrecken, diese Ressource für alle leeren Strings für die Wiederverwendung es eine Eigenschaft in dem generierten Designer-Code für ein Formular zuweisen .

Zum Beispiel, wenn aus irgendeinem Grunde eine Eigenschaft auf einem Steuer nicht mit einem Standardwert angegeben wird (so wird es Code serialisiert wird, selbst wenn er leer ist), dann wird es unsere Ressource verweisen, anstatt die leere Zeichenkette des Schreibens aus wörtlich im C # -Code.

Das Problem ist, dass es die lokalisierten Versionen verweist, und diese sind nicht-Code kompiliert.

Hier ist ein verkürztes Codebeispiel:

this.rpAllFields.KeyTip = 
  global::namespaces.SystemMessagesResources_sv_SE.
    dash_red_shift_info_description;

In diesem Fall wird die dash_red_shift_info_description keinen Wert für den sv-SE locale hat, so den Designer, wenn es eine leere Zeichenfolge im Code sieht, wird versuchen, diese Ressource zu verknüpfen. Aber die SystemMessagesResources_sv_SE ist nicht eine bestehende Klasse, aber scheinbar ein generierte Klassenname für die schwedische lokalisierte Version der SystemMessagesResources Ressourcendatei, die ist zu einer Klasse zusammengefasst.

Ist das möglich zu vermeiden? Wir sind immer ziemlich müde von der Suchen / Ersetzen jedes Mal, wenn wir etwas in der Form von Dateien zu ändern, und wir sind uns ziemlich sicher, dass es ein Schlag ins-my-Stirn-boneheaded, was wir getan haben, dass dies der Fall ist, aber wir sind aparently nicht in der Lage, die Ursache dieses selbst zu finden.

Der obige Code würde, wenn wir die Ressource entfernt, lesen sich wie folgt:

this.rpAllFields.KeyTip = "";
War es hilfreich?

Lösung

Sie könnten versuchen, eine Zeichenfolge-Ressource EMPTY_STRING, definiert als „“ für jedes Gebietsschema zu schaffen. Wenn Sie es die erste Ressource zu machen, wird der Formular-Designer (hoffentlich) wählen immer, dass man als Wert durch Ihre Formulare zu streuen. Auf diese Weise zumindest Du eine Zeichenfolge zu diesem Zweck verwenden.

Andere Tipps

Wenn das Problem durch eine leere Zeichenfolge in der Ressource-Datei verursacht wird, was wäre die Wirkung davon einen Raum. Also statt „“ die Ressource-Datei enthält „“. Ich weiß nicht, ob das die beste Lösung ist, aber ich würde gerne wissen, ob es die Designer verwenden, diese Ressource als Standard leere Zeichenfolge stoppt. Aber nicht zu wissen, wie es verwendet wird, bin ich nicht sicher, was die Auswirkungen mit einem Wert von nicht näher definierte als Raum definiert werden soll ...

Wie viel brauchen Sie eine Ressource, deren Wert ein leerer String? Ich kann einige mehrsprachige Szenarien vorstellen, wo einige Ressourcenschlüssel leer in einigen der unterstützten Sprachen entsprechen sollte (wenn Sie die String-Verkettung für einige UI-Elemente verwenden), ja.

Aber wenn mein Szenario nicht so etwas wie diese, würde ich nur Schrott den Ressource-Eintrags mit dem leeren String zurück. Ich würde einfach sagen: „Was für Standalone-UI Text leer übersetzt eigentlich?“.

Wenn ich wirklich die Ressource benötigt wird leer in einig Fälle (wo es für einen Artikel steht in einer Sprache und in dem kein Äquivalent Wort in einer anderen existiert), würde ich versuchen, wenn ich zu sehen die gleiche Wirkung auf andere Weise erzeugen könnte.

generiert Ressource-Datei und Beispielcode wäre gut.

Und was Sie sagen, ist: Sie einen leeren String wörtliche Definition in Ihrem Namensraum haben (die erste fand), aber das ein Problem verursacht? Wird es nicht zu jeder Zeit leer sein? Wenn Sie die Code- kompilieren tut es schrulligen Dinge wie diese um Platz zu sparen. Ich lief in ein ähnliches Problem, wenn für XAML-Dateien mit Code-Behind-Generierung on-the-fly automatisierte Build von Baugruppendateien: Der Compiler ist intelligent genug, um zu wissen, ‚es macht keinen Unterschied machen, aber für uns ist es tat, weil es die Literale umbenennen würde (die an anderer Stelle verwendet wurden).

Um dies zu umgehen wir genannte Typen für diese Primitive in unserem Namespace verwendet und hergestellt, dass ein global. Was ich hier sehe, ist, dass Ihr globalen Namensraum in der blanks- Füllen Sie eine haben möchten ‚unten‘, die alle null Strings auswertet.

Ich habe nicht mit dieser seit über einem Jahr arbeitete so vergib mir, wenn meine Formulierung schlecht ist, aber was ich meine ist: XML denken. Sie müssen entweder explizit Namensraum in den Eigenschaften verwenden oder ordnen sie niedriger (wie angefügte Eigenschaft in XAML).

Ich hoffe, das hilft (und sinnvoll)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top