public IEnumerable GenerateFunctionMetadata()

in sdk/Sdk/FunctionMetadataGenerator.cs [46:93]


        public IEnumerable<SdkFunctionMetadata> GenerateFunctionMetadata(string assemblyPath, IEnumerable<ITaskItem> referencePaths)
        {
            var targetAssemblies = new List<string>() { assemblyPath };

            // We don't need to scan assemblies that come from a framework (.NET, AspNetCore), they won't have functions types in them.
            targetAssemblies.AddRange(referencePaths.Where(x => x.GetMetadata("FrameworkReferenceName") == "").Select(x => x.ItemSpec));
            _logger.LogMessage($"Found {targetAssemblies.Count} assemblies to evaluate.");

            var resolver = new DefaultAssemblyResolver();
            foreach (string referencePath in referencePaths.Select(p => Path.GetDirectoryName(p.ItemSpec)).Distinct())
            {
                resolver.AddSearchDirectory(referencePath);
            }

            ReaderParameters readerParams = new ReaderParameters { AssemblyResolver = resolver };
            var functions = new List<SdkFunctionMetadata>();
            foreach (var path in targetAssemblies)
            {
                using (_logger.Indent())
                {
                    _logger.LogMessage($"Collecting function metadata from {Path.GetFileName(path)}.");

                    using (_logger.Indent())
                    {
                        try
                        {
                            var moduleDefinition = ModuleDefinition.ReadModule(path, readerParams);
                            functions.AddRange(GenerateFunctionMetadata(moduleDefinition));
                        }
                        catch (BadImageFormatException)
                        {
                            _logger.LogMessage($"Skipping file '{Path.GetFileName(path)}' because of a {nameof(BadImageFormatException)}.");
                        }
                        catch (FunctionsMetadataGenerationException ex)
                        {
                            _logger.LogError($"Failed to generate function metadata from {Path.GetFileName(path)}: {ex.Message}", path);
                            throw;
                        }
                        catch (Exception ex)
                        {
                            _logger.LogWarning($"Could not evaluate '{Path.GetFileName(path)}' for functions metadata. Exception message: {ex}");
                        }
                    }
                }
            }

            return functions;
        }