I am writing my own server side control and I am using images that are being stored in a .resx
file. In the console application this code works fine:
ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx");
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
rsxr.Close();
but here
protected override void RenderContents(HtmlTextWriter output)
{
ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx");
base.RenderContents(output);
foreach (DictionaryEntry d in rsxr)
{
output.Write(d.Key.ToString());
}
}
I get this error:
Could not find file 'C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Resource1.resx'
I tried to use the ResourceManager, but it requires a .resource
file. I can't access the resgen
tool (command prompt does not understand the resgen
command) and install it (during the attempt some errors ocured).
My questions are:
Why can't I read
.resx
?How to install the
resgen
tool properly?
thanks.
It is considered good practice to store your resource file under
App_GlobalResources
folder in application root or inApp_LocalResources
with the same name as your user control file. So for example user user control is uc.ascx file in local resource folder should be uc.ascx.resx. That way it is easier to maintain and asp.net will automatically detect it.Now your answers:
First Question: Use
Server.MapPath("~/")
points to physical directly where your web.config is. If you want to use a resource file in Controls folder you have to writeServer.MapPath("~/Controls/Resource1.resx")
to get the path.Not sure what you want to do with resgen tool? When you compile your application, resource file will also be compiled. select your resource file and click F4, it will show you build action, choose resource in build action and your resource file will be included in assembly.
You can review this post for more information: How to use image resource in asp.net website?