namespace ytLive.Helpers; /// /// Whether this binary is a **development build**. /// /// Why static readonly and not const: a const makes /// if (!DevBuild.IsDevelopment) return; a compile-time branch, so whichever arm is dead /// raises CS0162 — in Debug the guard is dead, in Release the body is. A readonly field is set /// once at type init, so both arms compile clean and the JIT folds the branch away. /// /// This is not the only defence. The developer panel's XAML and code-behind are /// removed from the Release compile entirely (ytLive.csproj, Page/Compile Remove), so a /// shipped binary contains no BAML to reveal. This flag is the second lock: it refuses the /// value even if something else calls the setter. /// /// Single source for the question. It gates the multi-instance profile /// (), the scoreboard's debug seeding, and the all-resolutions /// override (MainViewModel.DeveloperMode). /// public static class DevBuild { /// True for a Debug compile; false for Release and anything else. public static readonly bool IsDevelopment = #if DEBUG true; #else false; #endif }