internal static string PatchPath()

in ILRepack/Steps/XamlResourcePathPatcherStep.cs [119:147]


        internal static string PatchPath(
            string path,
            AssemblyDefinition primaryAssembly,
            AssemblyDefinition sourceAssembly,
            IList<AssemblyDefinition> otherAssemblies)
        {
            if (string.IsNullOrEmpty(path) || !(path.StartsWith("/") || path.StartsWith("pack://")))
                return path;

            string patchedPath = path;
            if (primaryAssembly == sourceAssembly)
            {
                if (otherAssemblies.Any(assembly => TryPatchPath(path, primaryAssembly, assembly, out patchedPath)))
                    return patchedPath;

                return path;
            }

            if (TryPatchPath(path, primaryAssembly, sourceAssembly, out patchedPath))
                return patchedPath;

            if (!path.EndsWith(".xaml"))
                return path;

            // we've got no non-primary assembly knowledge so far,
            // that means it's a relative path in the source assembly -> just add the assembly's name as subdirectory
            // /themes/file.xaml -> /library/themes/file.xaml
            return "/" + sourceAssembly.Name.Name + path;
        }