diff --git a/src/Controls/src/Build.Tasks/BuildException.cs b/src/Controls/src/Build.Tasks/BuildException.cs index fc8742c5bfff..99f01d8cd512 100644 --- a/src/Controls/src/Build.Tasks/BuildException.cs +++ b/src/Controls/src/Build.Tasks/BuildException.cs @@ -89,7 +89,6 @@ class BuildExceptionCode public static BuildExceptionCode ResourceDictDuplicateKey = new BuildExceptionCode("XFC0125", nameof(ResourceDictDuplicateKey), ""); public static BuildExceptionCode ResourceDictMissingKey = new BuildExceptionCode("XFC0126", nameof(ResourceDictMissingKey), ""); public static BuildExceptionCode XKeyNotLiteral = new BuildExceptionCode("XFC0127", nameof(XKeyNotLiteral), ""); - public static BuildExceptionCode GetResourcePath = new BuildExceptionCode("XFC0128", nameof(GetResourcePath), ""); public string Code { get; private set; } public string ErrorMessageKey { get; private set; } diff --git a/src/Controls/src/Build.Tasks/CompiledConverters/RDSourceTypeConverter.cs b/src/Controls/src/Build.Tasks/CompiledConverters/RDSourceTypeConverter.cs index 8a2e7003e36b..34ba4aa87146 100644 --- a/src/Controls/src/Build.Tasks/CompiledConverters/RDSourceTypeConverter.cs +++ b/src/Controls/src/Build.Tasks/CompiledConverters/RDSourceTypeConverter.cs @@ -40,17 +40,9 @@ public IEnumerable ConvertFromString(string value, ILContext contex module = currentModule.AssemblyResolver.Resolve(ar).MainModule; } } - var uri = new Uri(value, UriKind.Relative); - string resourcePath; - try - { - resourcePath = ResourceDictionary.RDSourceTypeConverter.GetResourcePath(uri, rootTargetPath); - } - catch (Exception exc) - { - throw new BuildException(BuildExceptionCode.GetResourcePath, node, exc, uri, rootTargetPath); - } + + var resourcePath = ResourceDictionary.RDSourceTypeConverter.GetResourcePath(uri, rootTargetPath); //fail early var resourceId = XamlCTask.GetResourceIdForPath(module, resourcePath); diff --git a/src/Controls/src/Build.Tasks/ErrorMessages.resx b/src/Controls/src/Build.Tasks/ErrorMessages.resx index 41c3347f1e42..b127c2cb14fe 100644 --- a/src/Controls/src/Build.Tasks/ErrorMessages.resx +++ b/src/Controls/src/Build.Tasks/ErrorMessages.resx @@ -248,8 +248,5 @@ x:Key expects a string literal. - - GetResourcePath failed: uri={0}, rootTargetPath={1} - \ No newline at end of file diff --git a/src/Controls/src/Core/ResourceDictionary.cs b/src/Controls/src/Core/ResourceDictionary.cs index 3de5057c4843..55db5e5b7539 100644 --- a/src/Controls/src/Core/ResourceDictionary.cs +++ b/src/Controls/src/Core/ResourceDictionary.cs @@ -17,6 +17,7 @@ namespace Microsoft.Maui.Controls /// public class ResourceDictionary : IResourceDictionary, IDictionary { + const string GetResourcePathUriScheme = "maui://"; static ConditionalWeakTable s_instances = new ConditionalWeakTable(); readonly Dictionary _innerDictionary = new Dictionary(); ResourceDictionary _mergedInstance; @@ -383,10 +384,11 @@ object IExtendedTypeConverter.ConvertFromInvariantString(string value, IServiceP internal static string GetResourcePath(Uri uri, string rootTargetPath) { - //need a fake scheme so it's not seen as file:// uri, and the forward slashes are valid on all plats + // GetResourcePathUriScheme is a fake scheme so it's not seen as file:// uri, + // and the forward slashes are valid on all plats var resourceUri = uri.OriginalString.StartsWith("/", StringComparison.Ordinal) - ? new Uri($"pack://{uri.OriginalString}", UriKind.Absolute) - : new Uri($"pack:///{rootTargetPath}/../{uri.OriginalString}", UriKind.Absolute); + ? new Uri($"{GetResourcePathUriScheme}{uri.OriginalString}", UriKind.Absolute) + : new Uri($"{GetResourcePathUriScheme}/{rootTargetPath}/../{uri.OriginalString}", UriKind.Absolute); //drop the leading '/' return resourceUri.AbsolutePath.Substring(1);