[asp.net / c#] ResourceReader directory / namespace

Pagina: 1
Acties:

  • Dennis
  • Registratie: Februari 2001
  • Nu online
Het is waarschijnlijk een klein iets om op te lossen maar ik kom er niet en er is nergens iets over te vinden.

Ik wil met een ResourceReader een hele .resx file omzetten in een HashTable. Dat is opzich niet zo moeilijk, maar in asp.net kijkt hij blijkbaar alleen in C:\Windows\system32. Als ik dit doe:

code:
1
IResourceReader reader = new ResourceReader(resourceLocation);
, waarbij resourceLocation de namespace is (Applicationname.directory.directory.resourcefile) dan krijg ik deze foutmelding:

code:
1
2
3
4
Could not find file "C:\WINDOWS\system32\Applicationname.directory.directory.resourcefile". 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not find file "C:\WINDOWS\system32\Webshop.components.language.ListProduct".


Als ik dezelfde constructie met ResourceManager gebruik, dan werkt het wél prima. Daar geef je dan ook een Assembly object aan mee. Maar die ResourceReader kan geen Assembly parameter mee krijgen.

Dit gedoe drijft me tot wanhoop! Meestal zijn er wel veel dingen over te vinden of zijn er collega's die me helpen maar Google heeft geen enkel antwoord hierop :(. Wie weet meer?

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
ResourceReader heeft in de constructor ook alleen een string fileName of een System.IO.Stream stream nodig en kan dus blijkbaar geen Assembly parameter afhandelen.

stp - PSN ID: stp_4


  • Dennis
  • Registratie: Februari 2001
  • Nu online
stp_4 schreef op donderdag 28 april 2005 @ 16:01:
ResourceReader heeft in de constructor ook alleen een string fileName of een System.IO.Stream stream nodig en kan dus blijkbaar geen Assembly parameter afhandelen.
Ja tot die conclusie was ik ook al gekomen :P.

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Dennis schreef op donderdag 28 april 2005 @ 16:06:
[...]

Ja tot die conclusie was ik ook al gekomen :P.
Nou ja, omdat in je startpost blijkt dat je het toch aan het proberen bent... ;)

stp - PSN ID: stp_4


  • Dennis
  • Registratie: Februari 2001
  • Nu online
stp_4 schreef op donderdag 28 april 2005 @ 16:09:
Nou ja, omdat in je startpost blijkt dat je het toch aan het proberen bent... ;)
Met de ResourceManager ja, maar met de ResourceReader kan het niet :).

  • Dennis
  • Registratie: Februari 2001
  • Nu online
Ik kwam deze net tegen en dat is eigenlijk precies wat ik zoek. Alleen werken wij hier gewoon nog met VS.NET 2003 en dit voorbeeld is pas werkend vanaf 2005.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Wat wil je precies dan?

Wat wil je halen uit je resource, een Image of een Icon?

Een Icon kun je bijvoorbeeld laden op de volgende manier:

C#:
1
2
_defaultIcon = new Icon(this.GetType(), "Images.element.ico");
_unsavedIcon = new Icon(this.GetType(), "Images.element_unsaved.ico");


Kijk ook is naar:

C#:
1
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceInfo();

[ Voor 31% gewijzigd door pjvandesande op 29-04-2005 10:19 . Reden: Extra info toegevoegd. ]


  • Dennis
  • Registratie: Februari 2001
  • Nu online
De resourcebestanden die ik ga gebruiken bevatten uitsluitend strings. Ze worden meegecompiled in het project. Verder is het de bedoeling dat ik zo'n heel resourcebestand kan converteren in een hashtable.

Resourcebestanden zijn eigenlijk al in Hashtable formaat, daarom vind ik het verbazingwekkend dat er nergens een mogelijkheid is om heel simpel alle strings uit een resourcebestand uit te lezen en deze te converteren naar een Hashtable.

  • Dennis
  • Registratie: Februari 2001
  • Nu online
Uiteindelijk lag de oplossing erg voor de hand, een Enumerator maken bleek voldoende.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        /// <summary>
        /// Gets a list of string from the resource file
        /// </summary>
        /// <param name="resourceLocation">Location where to search for the string.</param>
        /// <returns>Hashtable with all strings.</returns>
        public static Hashtable GetTranslatedResourceStrings(string resourceLocation)
        {
            Hashtable ht = new Hashtable();

            Assembly a = Assembly.GetExecutingAssembly();
            ResourceManager rm = new ResourceManager(resourceLocation, a);
            ResourceSet rs = rm.GetResourceSet(Thread.CurrentThread.CurrentCulture, true, true);
            IDictionaryEnumerator en = rs.GetEnumerator();
            while (en.MoveNext())
            {
                ht.Add(en.Key, en.Value);
            }

            return ht;
        }
Pagina: 1