jacksparrow jacksparrow - 1 month ago 24
C# Question

MVC App_GlobalResources, use local and publish

I have a problem with GlobalResources


  1. I create App_GlobalResources folder

  2. Add User.resx

  3. Add Name = "FirstName", Value = "First name"



Default I can't use this resources in my MVC project.
I tried:


  • App_GlobalResources.User.FirstName - did not work

  • Resources.User.FirstName - it works but only codebehind, when build and start application (local), show error:




Nie można pobrać właściwości „Name”, ponieważ lokalizacja nie powiodła się. Typ „Resources.Users” nie jest publiczny lub nie zawiera publicznej, statycznej właściwości ciągu o nazwie „FirstName”.


Which its translation is:


Unable to retrieve the properties "Name" as the location failed. Type "Resources.Users" is not a public or does not contain a public static property within named "FirstName."


Then I change User.resx properties:


  • Build Action: Embedded Resource

  • Copy to output: Directory Do not copy

  • Custom Tool: PublicResourceProxyGenerator

  • Custom Tool Namespace: "empty"



Now I can't use Resources.User.FirstName I have to useApp_GlobalResources.User.FirstName

I'm happy it's work. But yesterday is my first publish on the test server and resourses not working...

File does't copy to server...

I change User.resx properties


  • Build Action: Content

  • Copy to output: Directory Do not copy

  • Custom Tool: GlobalResourceProxyGenerator

  • Custom Tool Namespace: "empty"



Copy files but the application throws the same previous exception which I shared above and resources not work in localmachine, any advice?

Answer

Consider these notes about resources:

When you add a resource file to the App_GlobalResources special folder of an ASP.NET project, the GlobalResourceProxyGenerator custom tool will be used for your resource and it will generates an internal class in Resources namespace in App_GlobalResources assembly for managing resource.

  • These kind of resources are internal and their access modifier can not be changed.
  • They can not be used for data annotations attributes like [Display] or validation attributes.

  • They can be used in View or code directly by calling Resources.ResourceFile.ResourceProperty.

An embedded resource with ResXFileCodeGenerator as custom tool, will generate a public resource file in a namespace which is default namespace + folder hierarchy.

  • These kind of resources are public by default but you can change the access modifier of them using designer. Also you can generate them in a custom namespace by changing their Custom Tool Namespace property.

  • They can be used for data annotations attributes like [Display] or validation attributes.

  • They can be used in View or code directly by calling SomeNamespace.ResourceFile.ResourceProperty.

Comments