in src/Cli/func/Actions/LocalActions/InstallExtensionAction.cs [81:145]
public override async Task RunAsync()
{
var extensionBundleManager = ExtensionBundleHelper.GetExtensionBundleManager();
if (extensionBundleManager.IsExtensionBundleConfigured())
{
var hostFilePath = Path.Combine(Environment.CurrentDirectory, ScriptConstants.HostMetadataFileName);
if (_showNoActionWarning)
{
ColoredConsole.WriteLine(WarningColor($"No action performed. Extension bundle is configured in {hostFilePath}."));
}
return;
}
if (!string.IsNullOrEmpty(ConfigPath) && !FileSystemHelpers.DirectoryExists(ConfigPath))
{
throw new CliArgumentsException("Invalid config path, please verify directory exists");
}
if (!NeedsExtensionsInstall())
{
return;
}
if (CommandChecker.CommandExists("dotnet"))
{
var extensionsProj = await ExtensionsHelper.EnsureExtensionsProjectExistsAsync(_secretsManager, Csx, ConfigPath);
if (string.IsNullOrEmpty(Package) && string.IsNullOrEmpty(Version))
{
var project = ProjectHelpers.GetProject(extensionsProj);
foreach (var extensionPackage in ExtensionsHelper.GetExtensionPackages())
{
// Only add / update package referece if it does not exist or forced update is enabled
if (!ProjectHelpers.PackageReferenceExists(project, extensionPackage.Name) || Force)
{
await AddPackage(extensionsProj, extensionPackage.Name, extensionPackage.Version);
}
}
}
else if (!string.IsNullOrEmpty(Package) && !string.IsNullOrEmpty(Version))
{
await AddPackage(extensionsProj, Package, Version);
}
else
{
throw new CliArgumentsException(
"Must specify extension package name and version",
new CliArgument { Name = nameof(Package), Description = "Extension package name" },
new CliArgument { Name = nameof(Version), Description = "Extension package version" });
}
var syncAction = new SyncExtensionsAction(_secretsManager, false)
{
OutputPath = OutputPath,
ConfigPath = ConfigPath
};
await syncAction.RunAsync();
}
else
{
throw new CliException(Constants.Errors.ExtensionsNeedDotnet);
}
}