ErrLookup › Background articles › NotSupportedException from Unity PlayerSettings.WSA: deprecated phone/store tile members that throw unconditionally
NotSupportedException from Unity PlayerSettings.WSA: deprecated phone/store tile members that throw unconditionally
`NotSupportedException` is thrown by accessors of removed Windows Phone 8.1 and deprecated store visual-asset properties on `PlayerSettings.WSA` (for example `phoneSplashScreenImage`, `phoneMediumTile140`, `storeTileWideLogo140`). A developer meets it after touching a member that Unity gutted during its Windows Phone 8.1 to Universal Windows Platform migration: the member still exists, but its get and set bodies only `throw new NotSupportedException(...)`, while the message points at the replacement API. Direct compiled access is normally blocked first by `[Obsolete(..., true)]` (compile-time error CS0619), so the runtime throw surfaces mainly through reflection, dynamic dispatch, or stale assemblies that bypass the compiler check.
Distilled from 577 documented records across 56 repositories.
Background
NotSupportedException here is a deliberate landmine planted by Unity on its own editor API surface, not a generic runtime fault. When Unity unified its Windows Phone 8.1 image set onto the Universal Windows Platform, it gutted every `phone*` tile/icon/splash member and the deprecated `store*` scale members (the `_80`, `_140`, `_180`, and phone `_140/_180/_240` scales are not valid UWP asset sizes). Rather than delete the properties outright, Unity left them in place as stubs whose get and set accessors unconditionally execute `throw new NotSupportedException(...)` and whose message names the replacement: `GetVisualAssetsImage()` / `SetVisualAssetsImage()`. The throw is therefore a migration signal, not a recoverable runtime condition. The production code path is to stop calling the member, not to catch the exception.,What makes this family distinctive is the pairing of a compile-time guard with a runtime backstop. Each member is annotated `[Obsolete("Use GetVisualAssetsImage()/SetVisualAssetsImage()", true)]`, so normal compiled C# never reaches the accessor at all; the reference fails to build with error CS0619. The `NotSupportedException` only fires when that guard is bypassed: reflection (for example `PropertyInfo.GetValue` / `SetValue`), dynamic or member-access dispatch, emitted IL, or precompiled assemblies (for instance older packages or `.asmdef`-referenced code) that were not recompiled against the current Unity version. From the caller's side the symptom is therefore either a build error pointing at the deprecated property, or a runtime throw in a reflection-heavy code path that enumerates `PlayerSettings.WSA` members.,Across the documented records the pattern is uniform: the exception is always thrown by a deprecated `PlayerSettings.WSA` visual-asset member, the message always points at `GetVisualAssetsImage()` (for a get) or `SetVisualAssetsImage()` (for a set), and the fix always maps the old property name onto a `(WSAImageType, WSAImageScale)` pair. The differences between records are only in which member and which scale is involved. The `phone*` members map to UWP logo types (`UWPSquare44x44Logo`, `UWPSquare71x71Logo`, `UWPSquare150x150Logo`, `UWPWide310x150Logo`, `SplashScreenImage`) at supported scales `_100/_125/_150/_200/_400`; the deprecated store and phone scale suffixes themselves have no UWP equivalent, so the source image must be re-exported at a supported scale rather than handed to the old scale enum value. Because every record in this family comes from the same Unity API migration, the remediation is mechanical and shared, and the runtime throw should be read as a migration prompt rather than a bug to diagnose.
Common causes
- Calling a removed/renamed PlayerSettings.WSA visual-asset member.The member's get and set bodies unconditionally throw NotSupportedException because the property was gutted during the Windows Phone 8.1 to UWP migration. The throw is the replacement-API prompt, not a transient fault; the call must be migrated to Get/SetVisualAssetsImage.
- Reaching the accessor through reflection or dynamic dispatch.Because each member carries [Obsolete(..., true)], direct compiled access fails at CS0619 and never runs. The runtime NotSupportedException surfaces only when the accessor is reached via PropertyInfo.GetValue/SetValue, dynamic member access, or emitted IL that bypasses the compiler check.
- Relying on a deprecated image scale with no UWP equivalent.The _80, _140, _180, and phone _140/_180/_240 scale values are deprecated and are not valid UWP asset sizes. Code that picks a property by its scale suffix (e.g. phoneMediumTile140) hits a member whose only job is to throw, since there is no exact UWP scale to map it to.
- Enumerating PlayerSettings.WSA members by reflection without filtering obsolete ones.Reflection code that iterates over all properties of PlayerSettings.WSA and invokes them will trip every deprecated member's throw. The [Obsolete(error:true)] attribute protects compiled callers only, so reflection code must filter those members explicitly before invoking.
- Stale precompiled assemblies referencing deprecated members.Older packages or .asmdef-referenced assemblies compiled against a previous Unity version can still contain references to the deprecated members. They run the throw because they were not rebuilt through the current compiler's CS0619 check, so the references survive into the editor.
- Skipping Unity's API Updater on upgrade.When Unity is upgraded, references to obsolete members are meant to be rewritten by the API Updater. If the updater is dismissed or skipped, the deprecated PlayerSettings.WSA references remain in the project and the throw becomes reachable again.
- Not treating CS0618/CS0619 as errors.If deprecated-usage warnings are allowed rather than elevated to errors, the first line of defense (the compile-time guard) is weakened, and obsolete PlayerSettings.WSA usage can slip through to where the runtime NotSupportedException backstop is the only thing left to catch it.
What usually fixes it
- Migrate each deprecated property to Get/SetVisualAssetsImage with the matching (WSAImageType, WSAImageScale) pair. Read accessors map to GetVisualAssetsImage; write accessors map to SetVisualAssetsImage. For phone members use the UWPSquare* / UWPWide* / SplashScreenImage logo types; the message in the throw names the correct replacement direction.
- Regenerate the source art at a supported UWP scale (_100/_125/_150/_200/_400) rather than reusing the deprecated _80/_140/_180/_240 values. The old phone and store scales have no exact UWP equivalent and the old tiles do not map one-to-one in pixel dimensions, so re-export the image for the target logo size.
- Run Unity's API Updater on upgrade and resolve every CS0619 before running the editor. Do this in a single project-wide pass for all phone*/store* deprecated members rather than member-by-member, and grep the whole solution (including .asmdef-referenced assemblies) for the deprecated names to catch stale references.
- Stop reflecting over PlayerSettings.WSA indiscriminately. If reflection is unavoidable, filter out [Obsolete(Error = true)] members first (see the IsSafeAssetMember helper) and build an explicit name to (WSAImageType, WSAImageScale) map that calls Get/SetVisualAssetsImage instead of invoking the deprecated property.
- Treat compiler warnings CS0618 and CS0619 as errors in the .csproj or ProjectSettings so deprecated PlayerSettings.WSA usage is caught at compile time, before it can ever reach the runtime NotSupportedException backstop.
- Rebuild any precompiled or shared-library assemblies against the current Unity version, or guard the new calls with a version preprocessor directive (e.g. #if UNITY_2019_4_OR_NEWER), so no stale references to the deprecated members remain in the loaded code.
Documented occurrences
- PlayerSettings.phoneSplashScreenImage is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile140 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile240 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile140 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile240 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile140 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile240 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile140 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile240 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneAppIcon240 is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile140 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile240 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile140 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile240 is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile is deprecated. Use SetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneMediumTile is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneSmallTile is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
- PlayerSettings.phoneWideTile is deprecated. Use GetVisualAssetsImage() instead.(Unity-Technologies/UnityCsReference)
…and 557 more across the corpus — use search.
Honest provenance: generated on 2026-08-13 from AI-assisted analysis of the linked records. See how records are made.