From afd7da6c111d914cf0012cfacf7e36e639f72aa1 Mon Sep 17 00:00:00 2001 From: Buyaa Namnan Date: Tue, 21 Jun 2022 11:46:45 -0700 Subject: [PATCH 1/5] Work around for UriFormatException caused by \?\ prefix in the path --- .../src/System/Configuration/ClientConfigPaths.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs index 5d25b97588597a..1a74db048a21ac 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs @@ -258,7 +258,6 @@ private static string GetTypeAndHashSuffix(string exePath, bool isSingleFile) if (assembly != null && !isSingleFile) { AssemblyName assemblyName = assembly.GetName(); - Uri codeBase = new Uri(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name)); try { @@ -275,9 +274,12 @@ private static string GetTypeAndHashSuffix(string exePath, bool isSingleFile) { try { - // Certain platforms may not have support for crypto - hash = IdentityHelper.GetNormalizedUriHash(codeBase); - typeName = UrlDesc; + if (Uri.TryCreate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name), UriKind.RelativeOrAbsolute, out Uri codeBase)) + { + // Certain platforms may not have support for crypto + hash = IdentityHelper.GetNormalizedUriHash(codeBase); + typeName = UrlDesc; + } } catch (PlatformNotSupportedException) { } } From 8c7c8ff9daed43fc15e4ca83b3d390697791d74f Mon Sep 17 00:00:00 2001 From: Buyaa Namnan Date: Tue, 21 Jun 2022 14:46:04 -0700 Subject: [PATCH 2/5] Apply feedback --- .../src/System/Configuration/ClientConfigPaths.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs index 1a74db048a21ac..36c0b19a2b077b 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs @@ -274,7 +274,7 @@ private static string GetTypeAndHashSuffix(string exePath, bool isSingleFile) { try { - if (Uri.TryCreate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name), UriKind.RelativeOrAbsolute, out Uri codeBase)) + if (Uri.TryCreate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name), UriKind.Absolute, out Uri codeBase)) { // Certain platforms may not have support for crypto hash = IdentityHelper.GetNormalizedUriHash(codeBase); From baf4cc8cd5b519e6628407a747e130d2910ff06a Mon Sep 17 00:00:00 2001 From: Buyaa Namnan Date: Tue, 21 Jun 2022 22:46:45 -0700 Subject: [PATCH 3/5] Move try catch --- .../src/System/Configuration/ClientConfigPaths.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs index 36c0b19a2b077b..fb6646fa1fbac4 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs @@ -270,16 +270,13 @@ private static string GetTypeAndHashSuffix(string exePath, bool isSingleFile) { typeName = StrongNameDesc; } - else + else if (Uri.TryCreate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name), UriKind.Absolute, out Uri codeBase)) { try { - if (Uri.TryCreate(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assembly.ManifestModule.Name), UriKind.Absolute, out Uri codeBase)) - { - // Certain platforms may not have support for crypto - hash = IdentityHelper.GetNormalizedUriHash(codeBase); - typeName = UrlDesc; - } + // Certain platforms may not have support for crypto + hash = IdentityHelper.GetNormalizedUriHash(codeBase); + typeName = UrlDesc; } catch (PlatformNotSupportedException) { } } From d44a159d50bb4bb3d5d0f73f9df1b692e6ef71a6 Mon Sep 17 00:00:00 2001 From: Krzysztof Wicher Date: Mon, 6 Sep 2021 10:04:52 +0200 Subject: [PATCH 4/5] Fix ConfigurationManager when BaseDirectory starts with \\?" (#58627) --- .../src/System/Configuration/ClientConfigPaths.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs index fb6646fa1fbac4..a2a818b7a5150b 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigPaths.cs @@ -64,17 +64,7 @@ private ClientConfigPaths(string exePath, bool includeUserConfig) if (exeAssembly != null && !isSingleFile) { HasEntryAssembly = true; - - // The original .NET Framework code tried to get the local path without using Uri. - // If we ever find a need to do this again be careful with the logic. "file:///" is - // used for local paths and "file://" for UNCs. Simply removing the prefix will make - // local paths relative on Unix (e.g. "file:///home" will become "home" instead of - // "/home"). - string configBasePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, exeAssembly.ManifestModule.Name); - Uri uri = new Uri(configBasePath); - - Debug.Assert(uri.IsFile); - ApplicationUri = uri.LocalPath; + ApplicationUri = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, exeAssembly.ManifestModule.Name); } else { From b78e4ad53a3f6bb2c8e94a01ecbc40e1ef669d36 Mon Sep 17 00:00:00 2001 From: Buyaa Namnan Date: Mon, 25 Jul 2022 11:18:13 -0700 Subject: [PATCH 5/5] Add servicing version to the project --- .../src/System.Configuration.ConfigurationManager.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj b/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj index 92cadbe1711a78..e810ea98379036 100644 --- a/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj +++ b/src/libraries/System.Configuration.ConfigurationManager/src/System.Configuration.ConfigurationManager.csproj @@ -1,10 +1,12 @@ - + $(NetCoreAppCurrent);netstandard2.0;net461-windows false $(NoWarn);CA1847 true + true + 1 Provides types that support using configuration files. Commonly Used Types: