internal void RegisterAssemblyPaths()

in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/AssemblyLoader/AssemblyLoader.cs [56:140]


        internal void RegisterAssemblyPaths(IList<string> assemblyPaths)
        {
#if !NETFRAMEWORK
            Context.AssemblyPaths = assemblyPaths;
#else
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            {
                Version version = null;

                var separatorIndex = args.Name.IndexOf(",", StringComparison.Ordinal);

                // Fetch assembly name(Newtonsoft.Json) from args value like below
                // Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
                var assemblyName = separatorIndex > 0 ? args.Name.Substring(0, separatorIndex) : args.Name;

                if (separatorIndex > 0)
                {
                    // Fetch assembly version(11.0.0.0) from args value like below
                    // Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
                    separatorIndex = args.Name.IndexOf("=", separatorIndex, StringComparison.Ordinal);
                    if (separatorIndex > 0)
                    {
                        var endIndex = args.Name.IndexOf(",", separatorIndex, StringComparison.Ordinal);
                        if (endIndex > 0)
                        {
                            var parts = args.Name
                                .Substring(separatorIndex + 1, endIndex - separatorIndex - 1)
                                .Split('.');

                            version = new Version(int.Parse(parts[0]),
                                int.Parse(parts[1]),
                                int.Parse(parts[2]),
                                int.Parse(parts[3]));
                        }
                    }
                }

                var existingAssembly = AppDomain.CurrentDomain.GetAssemblies()
                    .FirstOrDefault(a => a.FullName == args.Name);
                if (existingAssembly != null)
                {
                    return existingAssembly;
                }

                if (version != null)
                {
                    var assemblyByVersion = AssemblyLoadUtility.TryLoadByNameOrVersion(
                        assemblyPaths,
                        assemblyName,
                        version.Major + "." + version.Minor + "." + version.Build + ".");

                    if (assemblyByVersion != null)
                    {
                        return assemblyByVersion;
                    }

                    assemblyByVersion = AssemblyLoadUtility.TryLoadByNameOrVersion(
                        assemblyPaths,
                        assemblyName,
                        version.Major + "." + version.Minor + ".");

                    if (assemblyByVersion != null)
                    {
                        return assemblyByVersion;
                    }

                    assemblyByVersion =
                        AssemblyLoadUtility.TryLoadByNameOrVersion(assemblyPaths, assemblyName, version.Major + ".");

                    if (assemblyByVersion != null)
                    {
                        return assemblyByVersion;
                    }
                }

                var assembly = AssemblyLoadUtility.TryLoadByNameOrVersion(assemblyPaths, assemblyName);
                if (assembly != null)
                {
                    return assembly;
                }

                return null;
            };
#endif
        }