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;
}