Skip to content

Fixed an ElasticBeanstalk deployment issue for Linux platform where Procfile was sometimes being generated with incorrect entrypoint when multiple runtimeconfig.json files were present. #363

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

ashishdhingra
Copy link
Contributor

@ashishdhingra ashishdhingra commented Feb 19, 2025

Issue #, if available: #285

Description of changes:
Fixed an ElasticBeanstalk deployment issue for Linux platform where Procfile was sometimes being generated with incorrect entrypoint when multiple runtimeconfig.json files were present.

The existing logic to determine the project file .csproj uses Utilitites.FindProjectFileInDirectory(). It has explicit check here to ensure that we get only one project file; else it returns null. So in case there are multiple project files, it would probably throw NullReferenceException in subsequent logic. We are using this assumption that we only have one project file for deployment at root of working directory, to get the assembly name (via msbuild).

Also note that we also invoke BaseCommand.EnsureInProjectDirectory(). This throws generic exception $"No .NET project found in directory {projectLocation} to build." in case where more than one project file if found in working directory, which might be incorrect or misleading.

NOTE:
Refer Using a Procfile to configure your .NET Core on Linux Elastic Beanstalk environment where it shows below example to configure 2 web applications.

web: dotnet ./dotnet-core-app1/dotnetcoreapp1.dll
web2: dotnet ./dotnet-core-app2/dotnetcoreapp2.dll

The PR supports one web application as of now to conform to existing logic.
CC @normj


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

{
logger?.WriteLine("Found existing Procfile file found and using that for deployment");
return;
}

logger?.WriteLine("Writing Procfile for deployment bundle");
var projectLocation = Utilities.DetermineProjectLocation(command.WorkingDirectory,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The caller of this method has already used DetermineProjectLocation to determine the location. Update this method signature to pass in the project location so we don't need to detect the location again. Since this is a tool not a library we can change the public signature.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in latest commit.

…rocfile was sometimes being generated with incorrect entrypoint when multiple runtimeconfig.json files were present.
@ashishdhingra ashishdhingra force-pushed the user/ashdhin/DotnetEB-Procfile-Linux-NewApproach-Issue285 branch from bff906a to e247673 Compare July 23, 2025 16:48
@ashishdhingra ashishdhingra requested a review from normj July 23, 2025 16:49
@GarrettBeatty GarrettBeatty requested a review from Copilot July 24, 2025 02:29
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes an ElasticBeanstalk deployment issue for Linux platforms where the Procfile was being generated with incorrect entrypoints when multiple runtimeconfig.json files were present in the publish directory.

  • Replaces unreliable file discovery logic with MSBuild-based assembly name lookup
  • Adds a new utility method to extract assembly names from project files
  • Updates the SetupPackageForLinux method to accept project location parameter

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
src/Amazon.ElasticBeanstalk.Tools/EBUtilities.cs Replaces FirstOrDefault() file discovery with MSBuild-based assembly name lookup and adds projectLocation parameter
src/Amazon.ElasticBeanstalk.Tools/Commands/DeployEnvironmentCommand.cs Passes projectLocation parameter to SetupPackageForLinux method
src/Amazon.Common.DotNetCli.Tools/Utilities.cs Adds new LookupAssemblyNameFromProjectFile utility method
.autover/changes/a4b5c0a2-7029-491b-90d1-12bba898c249.json Adds changelog entry for the bug fix

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@ashishdhingra ashishdhingra merged commit 67b3df2 into dev Jul 29, 2025
10 checks passed
@ashishdhingra ashishdhingra deleted the user/ashdhin/DotnetEB-Procfile-Linux-NewApproach-Issue285 branch July 29, 2025 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants