When building apps that are tied to a backend service, you often have different URLs, secrets, or keys depending on your environment. In ASP.NET core projects, the appsettings.json
file can be used to alternate between these environment variables, but what about for UWP apps?
Microsoft MVP Martin Zikmund has a great writeup on how to use ASP.NET’s existing infrastructure for appsettings.json
within UWP apps. Make sure to take a look at this approach.
There also are other ways to achieve an appsettings-like solution. One approach I found was to use UWP’s existing .resw
file infrastructure.
Appsettings.resw
As I was building my open source, white noise app called Ambie, I wanted a simple way to have debug environment variables that could be easily updated in my build pipeline to use production variables. I saw Martin’s solution, but I was curious if I could find another way that leveraged existing UWP features. The .resw
files available to UWP apps turned out to be simple to implement, and even simpler to use within the app thanks to UWP’s ResourceLoader
class. Follow the steps below to add one to your own project.
Create the resw file
Right click on your Universal Windows project and add an appsettings.resw
to the root of the project.
Create IAppSettings interface
My app is setup with dependency injection, so I decided to create an interface representing the appsettings.resw strings. This was added to Ambie’s .NET Standard project. Here’s Ambie’s interface.
Create AppSettings class
In your Universal Windows project, create the class that implements IAppSettings
. As mentioned earlier, ResourceLoader
makes the usage of resw files easy. In this class’s constructor, simply use the ResourceLoader
to read the strings from your resw
file. Make sure that the input for GetForCurrentView()
is the name of the resw
file. Here’s Ambie’s class.
Usage
You can now easily use these app settings anywhere in your app. During debugging, edit your resw
file to have debug variables. Then use the interface or the class in your app like the below example. Source code is here.
Production variables in Azure Pipeline
Ambie is set up to use Azure Pipelines for its release builds. Feel free to look at Ambie’s YAML file to see what a pipeline looks like for UWP apps. Creating this pipeline will be left as an exercise for the reader. Below are the steps to add production variables to your build pipeline.
Add new variable group in Azure Pipelines Library
See these instructions on how to add a new variable group and how to use it in your pipeline. Below I’ll show how I do it for Ambie, but these steps may be different depending on the needs of your project.
Navigate to Azure Pipeline’s library page, and add a new variable group. Then add variables.
Enable variable group in your build pipeline
Make sure that your YAML pipeline is configured to use your variable group. You can find this inside of Ambie’s YAML file.
Edit the resw with PowerShell
In order to use production values, we’ll need to modify the resw file in the build pipeline. Notice in Ambie’s YAML file, there is a PowreShell task that edits the resw file. Copy this into your build pipeline before the compilation task. And now, you’re done!
In conclusion
UWP’s ResourceLoader
makes for a simple way to add some debug/production environment variables to your app. While it does not operate with the same features as ASP.NET core’s appsettings.json
system, it is a good alternative for simple projects such as Ambie.