Owin.Loader.DefaultLoader.GetDefaultConfigurationString C# (CSharp) Method

GetDefaultConfigurationString() private static method

private static GetDefaultConfigurationString ( string[]>.Func defaultTypeNames ) : string
defaultTypeNames string[]>.Func
return string
        private static string GetDefaultConfigurationString(Func<Assembly, string[]> defaultTypeNames)
        {
            var info = AppDomain.CurrentDomain.SetupInformation;

            IEnumerable<string> searchPaths = new string[0];
            if (info.PrivateBinPathProbe == null || string.IsNullOrWhiteSpace(info.PrivateBinPath))
            {
                // Check the current directory
                searchPaths = searchPaths.Concat(new string[] { string.Empty });
            }
            if (!string.IsNullOrWhiteSpace(info.PrivateBinPath))
            {
                // PrivateBinPath may be a semicolon separated list of subdirectories.
                searchPaths = searchPaths.Concat(info.PrivateBinPath.Split(';'));
            }

            foreach (string searchPath in searchPaths)
            {
                var assembliesPath = Path.Combine(info.ApplicationBase, searchPath);

                if (!Directory.Exists(assembliesPath))
                {
                    continue;
                }

                var files = Directory.GetFiles(assembliesPath, "*.dll")
                    .Concat(Directory.GetFiles(assembliesPath, "*.exe"));

                foreach (var file in files)
                {
                    try
                    {
                        var reflectionOnlyAssembly = Assembly.ReflectionOnlyLoadFrom(file);

                        var assemblyFullName = reflectionOnlyAssembly.FullName;

                        foreach (var possibleType in defaultTypeNames(reflectionOnlyAssembly))
                        {
                            var startupType = reflectionOnlyAssembly.GetType(possibleType, false);
                            if (startupType != null)
                            {
                                return possibleType + ", " + assemblyFullName;
                            }
                        }
                    }
                    catch (BadImageFormatException)
                    {
                        // Not a managed dll/exe
                    }
                }
            }

            return null;
        }