{"record":{"id":"b5a60220aa1c4720","repo":"dotnet/wpf","slug":"notimplementedexception","errorCode":null,"errorMessage":"NotImplementedException","messagePattern":"NotImplementedException","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"warning","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/MS/Internal/AppModel/ProgressPage.cs","lineNumber":62,"sourceCode":"    };\n\n    internal class NativeProgressPageProxy : IProgressPage2\n    {\n        internal NativeProgressPageProxy(INativeProgressPage npp)\n        {\n            _npp = npp;\n        }\n\n        public void ShowProgressMessage(string message)\n        {\n            // Ignore the error code.  This page is transient and it's not the end of the world if this doesn't show up.\n            HR hr = _npp.ShowProgressMessage(message);\n        }\n\n        public Uri DeploymentPath\n        {\n            set { }\n            get { throw new System.NotImplementedException(); }\n        }\n\n        /// <remarks>\n        /// The native progress page sends a stop/cancel request to its host object, which then calls \n        /// IBrowserHostServices.ExecCommand(OLECMDID_STOP).\n        /// </remarks>\n        public DispatcherOperationCallback StopCallback\n        {\n            set { }\n            get { throw new System.NotImplementedException(); }\n        }\n\n        /// <remarks>\n        /// The native progress page sends a Refresh request to its host object, which then calls \n        /// IBrowserHostServices.ExecCommand(OLECMDID_REFRESH).\n        /// </remarks>\n        public System.Windows.Threading.DispatcherOperationCallback RefreshCallback\n        {","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/MS/Internal/AppModel/ProgressPage.cs#L44-L80","documentation":"NativeProgressPageProxy.DeploymentPath is a write-only COM-facing proxy property: the setter is intentionally empty and the getter throws NotImplementedException. The native progress page never reads the path back through this managed proxy, so reading it is unsupported by design.","triggerScenarios":"Reading the DeploymentPath property of a NativeProgressPageProxy instance obtained via the WPF ClickOnce progress-page hosting path.","commonSituations":"Reflection-based or debugging code enumerating properties of the progress page proxy and reading every getter; custom progress UI code that mistakenly assumes the property is readable.","solutions":["Do not read DeploymentPath; keep the value on the managed/native side that sets it.","Store the deployment URI in your own field when you set it, and read from that instead.","Skip read of getter-only-unsupported properties when reflecting over the proxy (guard with try-catch NotImplementedException)."],"exampleFix":"// before\nvar path = progressPage.DeploymentPath;\n// after\nUri path = myDeploymentPathHolder ?? null; // captured when the setter was called","handlingStrategy":"type-guard","validationCode":"bool canReadDeploymentPath = progressPage is not NativeProgressPageProxy;\nif (canReadDeploymentPath) { var p = progressPage.DeploymentPath; }","typeGuard":"static bool HasReadableDeploymentPath(object page) =>\n    page is NativeProgressPageProxy ? false : page?.GetType().GetProperty(\"DeploymentPath\")?.CanRead == true;","tryCatchPattern":"Uri path;\ntry { path = progressPage.DeploymentPath; }\ncatch (NotImplementedException) { path = myStoredDeploymentPath; }","preventionTips":["Treat NativeProgressPageProxy properties as write-only","Track values you set in your own fields","Avoid two-way data binding on proxy properties","Guard reflection property dumps with NotImplementedException handling"],"tags":["wpf","clickonce","not-implemented","property"],"backgroundTag":"method-not-implemented","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}