-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Description
Support for external custom resource-set types seems to be very advanced and possibly never used feature in practice. It makes trimming very complicated and brings large unnecessary dependencies as well as opens doors for potential security problems. The idea would be to add a new feature switch to block setting mediator.UserResourceSet and validate that .resources files require only System.Resources.RuntimeResourceSet and System.Resources.ResourceReader which I suspect all netcore apps use anyway.
Effectively replacing CreateResourceSet with
internal static RuntimeResourceSet CreateResourceSet(Stream store)
{
// TODO: +Do checking for resource header versions
return new RuntimeResourceSet(store, permitDeserialization: true);
}This would have two effects
- Removing all resources related warnings from illinker because of linker unsafe behaviour
- Large size savings in refactored code due to fewer dependencies
The feature switch would also help with size trimming work a lot because it would allow propagating the information that we are dealing with RuntimeResourceSet only everywhere. In practice removing, for example, all code in ResourceReader which handles non-_ums code paths (including Unicode encoding dependency, etc).