private static void InstallAndLoadMessageNugetPackage(PackageInstaller nugetPackageInstaller, PackageIdentity nugetPackage) { nugetPackageInstaller .InstallPackageAsync(nugetPackage) .Wait(); // Load Messages var packagePath = nugetPackageInstaller.GetInstalledPath(nugetPackage); var assemblyFileNames = Directory.GetFiles(packagePath, "*.dll", SearchOption.AllDirectories); foreach (var assemblyFileName in assemblyFileNames) { LoadMessageAssembly(assemblyFileName); } }
private async Task <EnvironmentPackageResult> AddEnvironmentPackageAsync( DeploymentExecutionDefinition deploymentExecutionDefinition, DirectoryInfo tempDirectoryInfo, List <FileMatch> possibleXmlTransformations, List <FileMatch> replaceFiles, List <DirectoryInfo> tempDirectoriesToClean, SemanticVersion version, CancellationToken cancellationToken = default) { _logger.Debug("Fetching environment configuration {EnvironmentConfig}", deploymentExecutionDefinition.EnvironmentConfig); SemanticVersion expectedVersion = version; string expectedPackageId = $"{deploymentExecutionDefinition.PackageId}.{DeploymentConstants.EnvironmentLiteral}.{deploymentExecutionDefinition.EnvironmentConfig}"; ImmutableArray <SemanticVersion> allVersions = await _nugetPackageInstaller.GetAllVersionsAsync( new NuGetPackageId(expectedPackageId), allowPreRelease : expectedVersion.IsPrerelease, nuGetSource : deploymentExecutionDefinition.NuGetPackageSource, nugetConfig : deploymentExecutionDefinition.NuGetConfigFile, nugetExePath : deploymentExecutionDefinition.NuGetExePath, timeoutInSeconds : 35, adaptiveEnabled : deploymentExecutionDefinition.PackageListPrefixEnabled, prefix : deploymentExecutionDefinition.PackageListPrefixEnabled.HasValue && deploymentExecutionDefinition.PackageListPrefixEnabled.Value?deploymentExecutionDefinition.PackageListPrefix : "" ); var matchingFoundEnvironmentPackage = allVersions .Where(currentVersion => currentVersion == expectedVersion) .ToList(); if (matchingFoundEnvironmentPackage.Count > 1) { _logger.Error("Found multiple environment packages matching '{ExpectedMatch}', {Found}", expectedVersion.ToNormalizedString(), string.Join(", ", matchingFoundEnvironmentPackage.Select(currentVersion => $"'{currentVersion.ToNormalizedString()}'"))); return(new EnvironmentPackageResult(false)); } const string environmentConfigPrefix = "EF_"; if (matchingFoundEnvironmentPackage.Any()) { var tempInstallDirectory = new DirectoryInfo( Path.Combine( tempDirectoryInfo.FullName, $"{environmentConfigPrefix}tmp", deploymentExecutionDefinition.EnvironmentConfig)); var deploymentDefinition = new DeploymentExecutionDefinition( expectedPackageId, tempInstallDirectory.FullName, expectedVersion, nugetExePath: deploymentExecutionDefinition.NuGetExePath, nuGetPackageSource: deploymentExecutionDefinition.NuGetPackageSource, nuGetConfigFile: deploymentExecutionDefinition.NuGetConfigFile); var tempOutputDirectory = new DirectoryInfo( Path.Combine( tempDirectoryInfo.FullName, $"{environmentConfigPrefix}out", deploymentExecutionDefinition.EnvironmentConfig)); MayBe <InstalledPackage> installedEnvironmentPackage = await _packageInstaller.InstallPackageAsync( deploymentDefinition, tempOutputDirectory, false, null, cancellationToken).ConfigureAwait(false); if (!installedEnvironmentPackage.HasValue) { _logger.Error( "No environment NuGet package was installed for deployment definition {DeploymentDefinition}", deploymentDefinition); return(new EnvironmentPackageResult(false)); } var configContentDirectory = new DirectoryInfo( Path.Combine(tempOutputDirectory.FullName, expectedPackageId, "content")); if (!configContentDirectory.Exists) { _logger.Debug("The content directory for the environment package does not exist"); } else { ImmutableArray <EnvironmentFile> environmentFiles = GetEnvironmentFiles( configContentDirectory, deploymentExecutionDefinition); if (environmentFiles.Any()) { foreach (EnvironmentFile item in environmentFiles) { FindMatches(item, possibleXmlTransformations, configContentDirectory, replaceFiles); } } else { IEnumerable <string> fileNamesToConcat = configContentDirectory.GetFiles().Select(file => $"'{file.Name}'"); string foundFiles = string.Join(", ", fileNamesToConcat); _logger.Debug("Could not find any action files in package, all files {FoundFiles}", foundFiles); } } _logger.Verbose("Deleting transformation package temp directory '{TempOutputDirectory}'", tempOutputDirectory); tempDirectoriesToClean.Add(tempOutputDirectory); } else { if (deploymentExecutionDefinition.RequireEnvironmentConfig) { _logger.Error( "Environment config was set to {EnvironmentConfig} but no package was found with id {ExpectedPackageId} and version {Version}, deployment definition require the environment config", deploymentExecutionDefinition.EnvironmentConfig, expectedPackageId, expectedVersion.ToNormalizedString()); return(new EnvironmentPackageResult(false)); } _logger.Debug( "Environment config was set to {EnvironmentConfig} but no package was found with id {ExpectedPackageId} and version {Version}", deploymentExecutionDefinition.EnvironmentConfig, expectedPackageId, expectedVersion.ToNormalizedString()); } var foundPackage = matchingFoundEnvironmentPackage.SingleOrDefault(); return(new EnvironmentPackageResult(true, foundPackage)); }