We're currently upgrading some components of our application to new technologies such as C# using WPF and MVVM. Since we try to avoid past mistakes that have been made in our now legacy applications, a question came up in our team how we should ship external resources that are likely to change, such as icons or images. In our legacy applications they were basically embedded in each applications, which required a full recompile of the applications just to change some icon. We don't want to just dump the raw files into a folder either, since some of them might be licensed and shouldn't be directly accessible to the customer.
We thought that we split all our resources into an external file (such as a DLL), which all our applications can access. So every time some resource is changed, we just have to ship a new version of our resource library. However there are some cases, where a general storage is not desirable, for example if just one specific icon in a single application should change. If we'd just replace that resource, it would likely change in all applications using that resource.
How do "big" applications handle this or is there a best practice in how to do this?