{"record":{"id":"4b15625c338ec814","repo":"dotnet/wpf","slug":"packagealreadyexists","errorCode":null,"errorMessage":"PackageAlreadyExists","messagePattern":"PackageAlreadyExists","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationCore/System/IO/Packaging/PackageStore.cs","lineNumber":109,"sourceCode":"       \n            if (PackUriHelper.ComparePackUri(packUri, BaseUriHelper.PackAppBaseUri) == 0 ||\n                PackUriHelper.ComparePackUri(packUri, BaseUriHelper.SiteOfOriginBaseUri) == 0)\n            {\n                throw new ArgumentException(SR.NotAllowedPackageUri, nameof(uri));\n            }\n\n            ArgumentNullException.ThrowIfNull(package);\n\n            lock (_globalLock)\n            {\n                if (_packages == null)\n                {\n                    _packages = new HybridDictionary(2);\n                }\n\n                if (_packages.Contains(uri))\n                {\n                    throw new InvalidOperationException(SR.PackageAlreadyExists);\n                }\n                \n                _packages.Add(uri, package);\n            }\n        }\n\n        /// <summary>\n        /// Removes a uri, package pair from the package store.\n        /// </summary>\n        /// <param name=\"uri\">key uri</param>\n        /// <permission cref=\"EnvironmentPermission\"></permission>\n        /// <remarks>\n        /// </remarks>\n        public static void RemovePackage(Uri uri)\n        {\n            ValidatePackageUri(uri);\n\n            lock (_globalLock)","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/IO/Packaging/PackageStore.cs#L91-L127","documentation":"PackageStore.AddPackage refuses duplicate registration: if _packages already contains an entry for the given key URI, it throws InvalidOperationException(SR.PackageAlreadyExists). Each pack authority URI may map to at most one Package in the global store.","triggerScenarios":"Calling PackageStore.AddPackage twice with the same Uri (e.g. the same pack://myapp:,,,/ key) without removing the first package.","commonSituations":"Re-initialization logic that registers a resource package on every startup/event without a matching RemovePackage; plugin reload paths re-registering the same authority.","solutions":["Call PackageStore.RemovePackage(uri) before re-adding, or check PackageStore.GetPackage(uri) != null first.","Use a unique authority per package instance (e.g. append a version segment to the pack URI).","Restructure startup so registration happens exactly once (guard with a flag)."],"exampleFix":"// before\nPackageStore.AddPackage(uri, pkg);\n// after\nif (PackageStore.GetPackage(uri) != null) PackageStore.RemovePackage(uri);\nPackageStore.AddPackage(uri, pkg);","handlingStrategy":"validation","validationCode":"if (PackageStore.GetPackage(uri) != null) PackageStore.RemovePackage(uri);","typeGuard":null,"tryCatchPattern":"try { PackageStore.AddPackage(uri, pkg); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"already exists\")) { PackageStore.RemovePackage(uri); PackageStore.AddPackage(uri, pkg); }","preventionTips":["Check GetPackage before AddPackage","Pair every AddPackage with RemovePackage on shutdown/reload","Register each authority exactly once (guard with a flag)"],"tags":["wpf","packaging","packagestore","duplicate"],"backgroundTag":"file-already-exists","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}