static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile("secrets.json", optional: false, reloadOnChange: true); IConfigurationRoot configuration = builder.Build(); Console.WriteLine("Retrieving token from key vault..."); var devOpsToken = configuration["AzureDevOpsInstallerToken"]; var devOpsSettingSection = configuration.GetSection("DevOpsEnvironmentSettings"); var organizationUri = GetSetting(devOpsSettingSection, "OrganizationUri"); var projectName = GetSetting(devOpsSettingSection, "ProjecName"); var projectGuid = GetSetting(devOpsSettingSection, "ProjectGuid"); var username = GetSetting(devOpsSettingSection, "Username"); Console.WriteLine("Connecting Dev Ops organization..."); var devOpsService = new AzureDevOpsService(organizationUri, username, devOpsToken, new Guid(projectGuid)); Console.WriteLine("Retrieving build data..."); var lastBuild = devOpsService.GetProjectBuilds() .Result .OrderByDescending(k => k.LastChangedDate) .FirstOrDefault(); Console.WriteLine("Downloading zip from artifactor..."); if (File.Exists(FilePath)) { File.Delete(FilePath); } CreateNewDirectory(ArtifactorExtractionFolder); //CreateNewDirectory(AssemblyCliExtractionFolder); Stream zipStream = devOpsService.GetArtifact(lastBuild.Id, ArtifactName).Result; using (FileStream zipFile = new FileStream(FilePath, FileMode.Append)) { zipStream.CopyTo(zipFile); } Console.WriteLine("Unzipping artifactor..."); ZipFile.ExtractToDirectory(FilePath, ArtifactorExtractionFolder); var assemblyCliZipFileName = $@"{ArtifactorExtractionFolder}\Assembly\DDCli\{lastBuild.Id}.zip"; var assemblyCliDynamicsZipFileName = $@"{ArtifactorExtractionFolder}\Assembly\DDCli.Dynamics\{lastBuild.Id}.zip"; Console.WriteLine("Unzipping assemblies..."); DeleteDirectory(AssemblyCliExtractionFolder); DeleteDirectory(AssemblyCliDynamicsExtractionFolder); ZipFile.ExtractToDirectory(assemblyCliZipFileName, AssemblyCliExtractionFolder); ZipFile.ExtractToDirectory(assemblyCliDynamicsZipFileName, AssemblyCliDynamicsExtractionFolder); Console.WriteLine("Installing files in folder..."); if (Directory.Exists(InstallCliFolder)) { Directory.Delete(InstallCliFolder, true); } if (Directory.Exists(InstallCliDynamicsFolder)) { Directory.Delete(InstallCliDynamicsFolder, true); } Directory.Move(AssemblyCliExtractionFolder, InstallCliFolder); Directory.Move(AssemblyCliDynamicsExtractionFolder, InstallCliDynamicsFolder); Console.WriteLine("Installation complete"); }