Laden...

Resources File bereinigen

Erstellt von inTrance vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.691 Views
inTrance Themenstarter:in
170 Beiträge seit 2005
vor 14 Jahren
Resources File bereinigen

Hallo!

Ich würde gerne das Resource.resx File bereinigen - Das heißt alle nicht benutzten Bilder und Strings entfernen. Dies soll nicht nur wegen der Speicherbereinigung geschehen sondern auch, weil wir die Software demnächst zum Übersetzen geben und es uns deutlich mehr Geld kosten würde mit den ganzen unbenutzten Resourcen.

Wie kann ich dies unter VS 2008 erledigen? Gibt es vielleicht ein Makro dafür? Per Hand wird schwierig, da es bestimmt 1000 Einträge sind von denen die Hälfte ungenutzt sind.

Vielen Dank für alle Tipps!

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo inTrance,

meiner Einschätzung nach muss man hier manuell vorgehen, zumindest kenne ich keine Möglichkeit hier ungenutzte Referenzen aufzulösen.

Wenn dem tatsächlich so ist, dann empfehle ich Dir, dann mache ein neues Ressourcen-File in dem Du nur die benötigsten aufnimmst, und lösche das alte.

Eventuell (völlig blind geraten und noch nicht verifiziert) gibt es eine Möglichkeit über den kompletten Inhalt der Ressource zu iterieren (mit einem Enumerator z.B.), dann könntest Du in 2 Schritten vorgehen:
Hilfsklasse erstellen, die die komplette Ressourcendatei durchgeht und deren Bezeichner in einer Textdatei ausgibt. Im 2. Schritt könntest Du dann den Quellcode nach diesen Bezeichnern durchsuchen, aber ob das 100%ig zuverlässig ist, das kann ich nicht beurteilen.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

656 Beiträge seit 2008
vor 14 Jahren

Auf die schnelle würde ich hier auch sagen, dass du vermutlich per Tool am schnellsten sein wirst.
Ein fertiges Tool ist mir nicht bekannt (falls jemand eins findet, nur her damit!), aber theoretisch kann mans ja einfach selber schreiben:

Schnapp dir über
a)

var resourceManager = new ComponentResourceManager(typeof(MyForm));

eine Instanz des Resource files und verwende dessen Methoden, um an die Einträge zu kommen.
b) XmlReader/XmlDocument die jeweiligen Resources files und geh alle Einträge mit einem "name"-Attribut durch.

Per Reflection holst du dir dann
a) alle Felder des Formulars (auch private usw.) und vergleichst deren Name bzw. ">>" + Name mit dem Anfang des jeweiligen Resource Strings (z.b. _myButton.Text und >>_myButton.Size)
b) den IL Code der InitializeComponent Methode und suchst dort nach Object creations.

a) geht vermutlich schneller, kann unter umständen aber Controls "übersehen" (wenn du GenerateMember auf false setzt).
b) hingegen ist ein wenig aufwändiger, kann aber auch diese Controls erwischen.

Gruß, BhaaL

inTrance Themenstarter:in
170 Beiträge seit 2005
vor 14 Jahren

Klingt erstmal gut!

Gibt es denn auch irgendeinen Weg per Reflection die Strings / Images zu finden, die direkt im Code referenziert sind? zB die Strings der MessageBoxen...