private bool NeedsExtensionsInstall()

in src/Cli/func/Actions/LocalActions/InstallExtensionAction.cs [147:204]


        private bool NeedsExtensionsInstall()
        {
            string warningMessage = "No action performed because no functions in your app require extensions.";

            // CASE 1: If users need a package to be installed
            if (!string.IsNullOrEmpty(Package) || !string.IsNullOrEmpty(Version))
            {
                return true;
            }

            // CASE 2: If there are any bindings that need to install extensions
            if (ExtensionsHelper.GetExtensionPackages().Count() > 0)
            {
                return true;
            }

            var extensionsProjDir = string.IsNullOrEmpty(ConfigPath) ? Environment.CurrentDirectory : ConfigPath;
            var extensionsProjFile = Path.Combine(extensionsProjDir, Constants.ExtensionsCsProjFile);

            // CASE 3: No extensions.csproj
            if (!FileSystemHelpers.FileExists(extensionsProjFile))
            {
                if (_showNoActionWarning)
                {
                    ColoredConsole.WriteLine(WarningColor(warningMessage));
                }

                return false;
            }

            // CASE 4: extensions.csproj present with only ExtensionsMetaDataGenerator in it
            // We look for this special case because we had added ExtensionsMetaDataGenerator to all function apps.
            // These apps do not need to do a restore, so if only ExtensionsMetaDataGenerator is present, we don't need to continue
            var extensionsProject = ProjectHelpers.GetProject(extensionsProjFile);
            var extensionsInProject = extensionsProject.Items
                    .Where(item => item.ItemType.Equals(Constants.PackageReferenceElementName, StringComparison.OrdinalIgnoreCase))
                    .ToList();
            if (extensionsInProject.Count == 1 &&
                extensionsInProject.FirstOrDefault(item =>
                item.Include.Equals(Constants.ExtensionsMetadataGeneratorPackage.Name, StringComparison.OrdinalIgnoreCase)) != null)
            {
                if (_showNoActionWarning)
                {
                    ColoredConsole.WriteLine(WarningColor(warningMessage));
                }

                if (StaticSettings.IsDebug)
                {
                    ColoredConsole.WriteLine(VerboseColor($"InstallExtensionAction: No action performed because only {Constants.ExtensionsMetadataGeneratorPackage.Name} reference was found." +
                    $" This extension package does not require and extension install by itself." +
                    $" No other required extensions were found."));
                }

                return false;
            }

            return true;
        }