Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Resources aus Satellite Assembly laden
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

Resources aus Satellite Assembly laden

beantworten | zitieren | melden

Hallo,

ich hab ein Problem und bin bisschen am verzweifeln weil ich es einfach nicht gelöst bekomme. Ich hab auch schon im Forum gesucht, auch einiges dazu gefunden leider nix was mir weiter hilft.

Vorhaben: Ich möchte aus einer Satellite Assembly alles resource strings extrahieren. Wenn ich die SA in den Reflector rein ziehen, und auf resources gehe, dann sind dort 6 manifest resources drin, wobei jede mehrere Elemente enthält. Daher allein die Tatsache das es der Reflector hin bekommt die zu extrahieren, lässt vermuten das es gehen muss!

Die Satellite Assembly liegt in der Englischen kultur vor, und das System ist auch auf englisch eingestellt.

Nun lade ich also die Satellite Assembly und möchte gern die Resourcen extrahieren. Zur Sicherheit, nicht das es doch nur an der falschen Kultur liegt, lade ich das ResourceSet mit allen Kulturen die auf dem Rechner da sind.
ps: Ich habe am Anfang natürlich immer nur die CultureInfo.CurrentUICulture genommen bzw. Thread.CurrentThread.CurrentUICulture aber das hat auch nicht funktioniert. Einzig um den Fakt auszuschließen, das es doch an der falschen Kultur liegt, iteriere ich über alle Kulturen.


Assembly assembly = Assembly.LoadFile(@"D:\....dll");
string[] resourceNames = assembly.GetManifestResourceNames();
foreach (string resourceName in resourceNames)
{
    ResourceManager resourceManager = new ResourceManager(resourceName, assembly);
    CultureInfo[] infos = CultureInfo.GetCultures(CultureTypes.AllCultures);
    foreach (CultureInfo info in infos)
    {
        ResourceSet set = resourceManager.GetResourceSet(info, true, false);
        if (set != null)
        {
            Console.Write("resource set found");
        }
    }
}

Ich lande leider NIE im set != null code block, daher das ResourceSet ist immer null. Nun hab ich mir gedacht vielleicht liegt es daran das der ManifestResourceName noch gewandelt werden muss weil
Zitat
The root name of the resource. For example the root name for the resource file named "MyResource.en-US.resources" is "MyResource" (Tooltip help of first parameter)

Bei mir ist der Resource Manifest Name wie folgt. Namesapce.en.resources. Daher habe ich folgendes versucht:


....
ResourceManager resourceManager = new ResourceManager(Program.GetResourceName(resourceName), assembly);
....

public static string GetResourceName(string resourceName)
{
    return Regex.Replace(resourceName, @"\.\w{2}\.resources", string.Empty);
}

Auch das hilft nicht, ich bekomme immer ein leeres Resource Set zurück. Weiß einer von euch Rat?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rollerfreak2 am .
Again what learned...
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

Themenstarter:

beantworten | zitieren | melden

Ich hab mich jetzt was gefunden mit dem es funktioniert. Hier der ResourceSet source mit dem man einfach ResourceSet's erstellen kann.


string[] names = assembly.GetManifestResourceNames();
foreach (string name in names)
{
    Stream stream = assembly.GetManifestResourceStream(name);
    System.Resources.MyResourceSet rs = new System.Resources.MyResourceSet(stream);
}

Der code für MyResourceSet mit dem es funktioniert ist hier zu finden.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von rollerfreak2 am .
Again what learned...
private Nachricht | Beiträge des Benutzers