When using resw files for resources in applications targetting the Windows App
SDK, there is no simple way to get strongly-typed access to the string resources
contained in those resw files. This means you are left to access them similar
to this:
void DoSomething()
{
ResourceLoader loader = new ResourceLoader();
myThing.Content = load.GetString("ThingContent");
}And hope you've typed it correctly.
In resx files – the predecessor of resw – Visual Studio would generate a
Resources.Designer.cs whenever you edited the file which provided strongly
typed access to resources. This wasn't continued for resw. Additionally that
file was committed to the repo, and not generated with every build.
Reswinator does exactly that -- generates a strongly typed accessor at build time.
Add the Rewsinator nuget package
to your project.
Thats it!
Add a resw to your project following the Microsoft guidelines
and build.
Thats it!
Now you can access you're resources this way:
void DoSomething()
{
myThing.Content = (namespace).Resources.ThingContent;
}If you have resources with . in them, they'll become nested classes. E.g for
a key name such as MyThing.Text, the class will nest like such:
(namespace).Resources.MyThing.TextWhatever your projects RootNamespace property is. If you haven't specified this
the namespace will be GeneratedResources.
It uses the projects default langauge (as specified in the project), and looks
for only resw files that match that language
They're generated into different classes that match the file name. E.g.
Errors.resw becomes <namspace>.Errors. The default Resources.resw will
always be Resources.
Files that have . them will have those removed to generate the class name for
those resources. If there is an existing resource wrapper class with that name,
a number will be suffixed to that class name
We only support Windows App SDK targets at this time. If you wish support for others, then file an issue. Pull requests are also welcome!