diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/src/HostFactoryResolver.cs b/src/libraries/Microsoft.Extensions.HostFactoryResolver/src/HostFactoryResolver.cs index 49ef8b69517309..d860312da271cf 100644 --- a/src/libraries/Microsoft.Extensions.HostFactoryResolver/src/HostFactoryResolver.cs +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/src/HostFactoryResolver.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -144,6 +145,14 @@ private static bool IsFactory(MethodInfo? factory) { return args => { + static bool IsApplicationNameArg(string arg) + => arg.Equals("--applicationName", StringComparison.OrdinalIgnoreCase) || + arg.Equals("/applicationName", StringComparison.OrdinalIgnoreCase); + + args = args.Any(arg => IsApplicationNameArg(arg)) || assembly.FullName is null + ? args + : args.Concat(new[] { "--applicationName", assembly.FullName }).ToArray(); + var host = hostFactory(args); return GetServiceProvider(host); }; diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/ApplicationNameSetFromAgrument.csproj b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/ApplicationNameSetFromAgrument.csproj new file mode 100644 index 00000000000000..716b25a87281da --- /dev/null +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/ApplicationNameSetFromAgrument.csproj @@ -0,0 +1,13 @@ + + + + $(NetCoreAppCurrent);net461 + true + Exe + + + + + + + diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/Program.cs b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/Program.cs new file mode 100644 index 00000000000000..f83f5c12af7966 --- /dev/null +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/ApplicationNameSetFromAgrument/Program.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +var host = new HostBuilder().ConfigureAppConfiguration(builder => builder.AddCommandLine(args)).Build(); \ No newline at end of file diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs index 8f6cf79de0bf3e..0e353f7f8cb708 100644 --- a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/HostFactoryResolverTests.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using Microsoft.Extensions.Configuration; using MockHostTypes; using System; using System.Diagnostics.CodeAnalysis; @@ -252,6 +253,17 @@ public void TopLevelStatements() Assert.IsAssignableFrom(factory(Array.Empty())); } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] + public void ApplicationNameSetFromAgrument() + { + Assembly assembly = Assembly.Load("ApplicationNameSetFromAgrument"); + var factory = HostFactoryResolver.ResolveServiceProviderFactory(assembly, s_WaitTimeout); + IServiceProvider? serviceProvider = factory(Array.Empty()); + + var configuration = (IConfiguration)serviceProvider.GetService(typeof(IConfiguration)); + Assert.Contains("ApplicationNameSetFromAgrument", configuration["applicationName"]); + } + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsThreadingSupported))] [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(NoSpecialEntryPointPattern.Program))] public void NoSpecialEntryPointPatternCanRunInParallel() diff --git a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/Microsoft.Extensions.HostFactoryResolver.Tests.csproj b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/Microsoft.Extensions.HostFactoryResolver.Tests.csproj index dc808c40b7cc99..bae78e8e4e183c 100644 --- a/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/Microsoft.Extensions.HostFactoryResolver.Tests.csproj +++ b/src/libraries/Microsoft.Extensions.HostFactoryResolver/tests/Microsoft.Extensions.HostFactoryResolver.Tests.csproj @@ -14,6 +14,7 @@ +