in src/AWS.Deploy.Orchestration/DeploymentBundleHandler.cs [195:243]
public async Task<string> CreateDotnetPublishZip(Recommendation recommendation)
{
_interactiveService.LogInfoMessage(string.Empty);
_interactiveService.LogInfoMessage("Creating Dotnet Publish Zip file...");
SwitchToSelfContainedBuildIfNeeded(recommendation);
var publishDirectoryInfo = _directoryManager.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
var additionalArguments = recommendation.DeploymentBundle.DotnetPublishAdditionalBuildArguments;
var windowsPlatform = recommendation.DeploymentBundle.EnvironmentArchitecture == SupportedArchitecture.Arm64 ? "win-arm64" : "win-x64";
var linuxPlatform = recommendation.DeploymentBundle.EnvironmentArchitecture == SupportedArchitecture.Arm64 ? "linux-arm64" : "linux-x64";
var runtimeArg =
recommendation.DeploymentBundle.DotnetPublishSelfContainedBuild &&
!additionalArguments.Contains("--runtime ") &&
!additionalArguments.Contains("-r ")
? $"--runtime {(recommendation.Recipe.TargetPlatform == TargetPlatform.Windows ? windowsPlatform : linuxPlatform)}"
: "";
var publishCommand =
$"dotnet publish \"{recommendation.ProjectPath}\"" +
$" -o \"{publishDirectoryInfo}\"" +
$" -c {recommendation.DeploymentBundle.DotnetPublishBuildConfiguration}" +
$" {runtimeArg}" +
$" {additionalArguments}";
// Blazor applications do not build with the default of setting self-contained to false.
// So only add the --self-contained true if the user explicitly sets it to true.
if(recommendation.DeploymentBundle.DotnetPublishSelfContainedBuild)
{
publishCommand += " --self-contained true";
}
var result = await _commandLineWrapper.TryRunWithResult(publishCommand, streamOutputToInteractiveService: true);
if (result.ExitCode != 0)
{
var errorMessage = "We were unable to package the application using 'dotnet publish'";
if (!string.IsNullOrEmpty(result.StandardError))
errorMessage = $"We were unable to package the application using 'dotnet publish' due to the following error:{Environment.NewLine}{result.StandardError}";
throw new DotnetPublishFailedException(DeployToolErrorCode.DotnetPublishFailed, errorMessage, result.ExitCode);
}
var zipFilePath = $"{publishDirectoryInfo.FullName}.zip";
await _zipFileManager.CreateFromDirectory(publishDirectoryInfo.FullName, zipFilePath);
recommendation.DeploymentBundle.DotnetPublishZipPath = zipFilePath;
recommendation.DeploymentBundle.DotnetPublishOutputDirectory = publishDirectoryInfo.FullName;
return zipFilePath;
}