How can I read embedded .resx in different assembly
Asked Answered
R

2

1

I have some dlls in my project that only contain many .resx files as embedded resources. In each project the .resx files are put into different folders. The property "Custom Tool Name Space" of all is set to the namespace of each project. When I try to use ResourceManager to get a string I get an error that for example "MyTemplate.resources" is not found but I only have "MyTemplate.resx" in the dll.

How can I access my resources?

new ResourceManager(typeof(MyTemplate.resx)).GetString("FirstNameTooltip");

As I said in comment below the Resources are dynamicly changed. and i have no direct access to its properties.

Ritualist answered 9/6, 2015 at 6:9 Comment(4)
Did you see this question: #6270579 ?Marienthal
You should probably show us some code, that we can see what you tried.Marienthal
thanks. but i said i have my .resx in other dll in the bin folder, not property of main project.Ritualist
Ok, I think I understand where you got stuck. I added an answer and improved the title of your question to better express the problem. (I hope I got it right.)Marienthal
O
1

Here's how I usually do:

string mystring = YourResourceNamespace.MyTemplate.FirstNameTooltip;

If you don't know the napespace, click on the .resx and double click on the Designer.cs, then check the namespace, all the keywords are defined as simple static variable with gettor, so just call those ones.

If ressource is in one other project, then simply incude it onto your project in order to access them from your project.

I hope this helps

Override answered 9/6, 2015 at 6:44 Comment(7)
thanks. my problem is that my .resx file classes are dyamicly changed. and i dont know realy which class is now need. type of resource and key value of resource are changed in variable. i use it to Implementation of IDataErrorInfo DataAnnotation Validation.Ritualist
if you don't know the namespace of class, I didn't have any solutions for you. Maybe store ressources in DB could helps?Override
I can get the name space. i have the information of class, I khow the typeof(class) but its dynamic in variable. how can I get instance?Ritualist
I have a ValidationAttribute Property. that contains ErrorMessageresourceName & ErrorMessageResourceType & ErrorMessage . I need The value of ErrorMessageresourceName in resource type of ErrorMessageResourceType.Ritualist
You just want to have error messages in different languages for UI validation in fact?Override
No, It is in one language. but i must use mutipleResources.resx to handle the validation.Ritualist
Let us continue this discussion in chat.Ritualist
M
0

You need to load the assembly first:

Assembly ressourceAssembly = Assembly.Load("ResourceAssembly");

(There are a couple of issues you could have with this. Read about dynamic assembly loading specificly.)

Then create the resource manager:

ResourceManager myManager = new 
   ResourceManager("<default namespace>.<Resx-Folder>.<Resx-File>", ressourceAssembly);

Then load the string:

myManager.GetString("FirstNameTooltip");
Marienthal answered 9/6, 2015 at 8:33 Comment(1)
thanks for your time. But as i said ValidationAttribute class has the assembly. the problem is ResourceManager try to locate resource file whit .resources extention and i need to use .resx extention. another point is the resource file are not in the root of dll project,they are put in folders by subject.Ritualist

© 2022 - 2024 — McMap. All rights reserved.