Skip to content

Commit e205186

Browse files
committed
change metadatareference check condition
1 parent d28d5db commit e205186

File tree

6 files changed

+22
-35
lines changed

6 files changed

+22
-35
lines changed

ReadMe.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ public class PositionOptions
10161016
}
10171017
```
10181018

1019-
When `Microsoft.Extensions.Configuration.Abstractions` is imported, `ConfigureEmptyConfiguration` becomes available to call. Additionally, when `Microsoft.Extensions.Configuration.Json` is imported, `ConfigureDefaultConfiguration` becomes available to call. In DefaultConfiguration, `SetBasePath(System.IO.Directory.GetCurrentDirectory())` and `AddJsonFile("appsettings.json", optional: true)` are executed before calling `Action<IConfigurationBuilder> configure`.
1019+
When `Microsoft.Extensions.Configuration` is imported, `ConfigureEmptyConfiguration` becomes available to call. Additionally, when `Microsoft.Extensions.Configuration.Json` is imported, `ConfigureDefaultConfiguration` becomes available to call. In DefaultConfiguration, `SetBasePath(System.IO.Directory.GetCurrentDirectory())` and `AddJsonFile("appsettings.json", optional: true)` are executed before calling `Action<IConfigurationBuilder> configure`.
10201020

10211021
Furthermore, overloads of `Action<IConfiguration, IServiceCollection> configure` and `Action<IConfiguration, ILoggingBuilder> configure` are added to `ConfigureServices` and `ConfigureLogging`, allowing you to retrieve the Configuration when executing the delegate.
10221022

sandbox/GeneratorSandbox/GeneratorSandbox.csproj

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
<ItemGroup>
1818
<!--<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
19-
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0" />
20-
<PackageReference Include="ZLogger" Version="2.5.9" />-->
19+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0" />-->
20+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
21+
<!--<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />-->
22+
<!--<PackageReference Include="ZLogger" Version="2.5.9" />-->
2123
</ItemGroup>
2224

2325
<ItemGroup>

sandbox/GeneratorSandbox/Program.cs

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#nullable enable
22

33
using ConsoleAppFramework;
4+
using Microsoft.Extensions.DependencyInjection;
45
//using Microsoft.Extensions.Configuration;
56
//using Microsoft.Extensions.DependencyInjection;
67
//// using Microsoft.Extensions.Hosting;
@@ -27,6 +28,10 @@
2728

2829
//app.Add<MyCommand>();
2930
//app.Run(args);
31+
// sc.BuildServiceProvider()
32+
33+
//IServiceProvider ser;
34+
//ser.CreateScope()
3035

3136
ConsoleApp.Run(args, () => { });
3237

src/ConsoleAppFramework/ConsoleAppGenerator.cs

+10-17
Original file line numberDiff line numberDiff line change
@@ -16,63 +16,56 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
1616
context.RegisterPostInitializationOutput(EmitConsoleAppTemplateSource);
1717

1818
// Emti ConfigureConfiguration/Logging/Services and Host.AsConsoleApp
19-
var hasDependencyInjection = context.MetadataReferencesProvider
19+
var hasReferences = context.MetadataReferencesProvider
2020
.Collect()
2121
.Select((xs, _) =>
2222
{
2323
var hasDependencyInjection = false;
2424
var hasLogging = false;
2525
var hasConfiguration = false;
2626
var hasJsonConfiguration = false;
27-
var hasHostAbstraction = false;
2827
var hasHost = false;
2928

3029
foreach (var x in xs)
3130
{
3231
var name = x.Display;
3332
if (name == null) continue;
3433

35-
if (!hasDependencyInjection && name.EndsWith("Microsoft.Extensions.DependencyInjection.Abstractions.dll"))
34+
if (!hasDependencyInjection && name.EndsWith("Microsoft.Extensions.DependencyInjection.dll")) // BuildServiceProvider
3635
{
3736
hasDependencyInjection = true;
3837
continue;
3938
}
4039

41-
if (!hasLogging && name.EndsWith("Microsoft.Extensions.Logging.Abstractions.dll"))
40+
if (!hasLogging && name.EndsWith("Microsoft.Extensions.Logging.dll")) // AddLogging
4241
{
4342
hasLogging = true;
4443
continue;
4544
}
4645

47-
if (!hasConfiguration && name.EndsWith("Microsoft.Extensions.Configuration.Abstractions.dll"))
46+
if (!hasConfiguration && name.EndsWith("Microsoft.Extensions.Configuration.dll")) // needs ConfigurationBuilder
4847
{
4948
hasConfiguration = true;
5049
continue;
5150
}
5251

53-
if (!hasJsonConfiguration && name.EndsWith("Microsoft.Extensions.Configuration.Json.dll"))
52+
if (!hasJsonConfiguration && name.EndsWith("Microsoft.Extensions.Configuration.Json.dll")) // AddJson
5453
{
5554
hasJsonConfiguration = true;
5655
continue;
5756
}
5857

59-
if (!hasHostAbstraction && name.EndsWith("Microsoft.Extensions.Hosting.Abstractions.dll"))
60-
{
61-
hasHostAbstraction = true;
62-
continue;
63-
}
64-
65-
if (!hasHost && name.EndsWith("Microsoft.Extensions.Hosting.dll"))
58+
if (!hasHost && name.EndsWith("Microsoft.Extensions.Hosting.dll")) // IHostBuilder, ApplicationHostBuilder
6659
{
6760
hasHost = true;
6861
continue;
6962
}
7063
}
7164

72-
return new DllReference(hasDependencyInjection, hasLogging, hasConfiguration, hasJsonConfiguration, hasHostAbstraction, hasHost);
65+
return new DllReference(hasDependencyInjection, hasLogging, hasConfiguration, hasJsonConfiguration, hasHost);
7366
});
7467

75-
context.RegisterSourceOutput(hasDependencyInjection, EmitConsoleAppConfigure);
68+
context.RegisterSourceOutput(hasReferences, EmitConsoleAppConfigure);
7669

7770
// get Options for Combine
7871
var generatorOptions = context.CompilationProvider.Select((compilation, token) =>
@@ -291,7 +284,7 @@ static void EmitConsoleAppBuilder(SourceProductionContext sourceProductionContex
291284

292285
static void EmitConsoleAppConfigure(SourceProductionContext sourceProductionContext, DllReference dllReference)
293286
{
294-
if (!dllReference.HasDependencyInjection && !dllReference.HasLogging && !dllReference.HasConfiguration && !dllReference.HasHost && !dllReference.HasHostAbstraction)
287+
if (!dllReference.HasDependencyInjection && !dllReference.HasLogging && !dllReference.HasConfiguration && !dllReference.HasHost)
295288
{
296289
return;
297290
}
@@ -312,7 +305,7 @@ static void EmitConsoleAppConfigure(SourceProductionContext sourceProductionCont
312305
sb.AppendLine("using Microsoft.Extensions.Configuration;");
313306
}
314307

315-
if (dllReference.HasHost || dllReference.HasHostAbstraction)
308+
if (dllReference.HasHost)
316309
{
317310
var sb2 = sb.Clone();
318311
sb2.AppendLine("using Microsoft.Extensions.Hosting;");

src/ConsoleAppFramework/Emitter.cs

+1-14
Original file line numberDiff line numberDiff line change
@@ -839,11 +839,6 @@ public void Dispose()
839839
}
840840
}
841841
842-
""");
843-
844-
if (dllReference.HasHostAbstraction)
845-
{
846-
sb.AppendLine("""
847842
internal static ConsoleApp.ConsoleAppBuilder ToConsoleAppBuilder(this IHostBuilder hostBuilder)
848843
{
849844
var host = hostBuilder.Build();
@@ -855,12 +850,6 @@ internal static ConsoleApp.ConsoleAppBuilder ToConsoleAppBuilder(this IHostBuild
855850
return ConsoleApp.Create();
856851
}
857852
858-
""");
859-
}
860-
861-
if (dllReference.HasHost)
862-
{
863-
sb.AppendLine("""
864853
internal static ConsoleApp.ConsoleAppBuilder ToConsoleAppBuilder(this HostApplicationBuilder hostBuilder)
865854
{
866855
var host = hostBuilder.Build();
@@ -871,10 +860,8 @@ internal static ConsoleApp.ConsoleAppBuilder ToConsoleAppBuilder(this HostApplic
871860
872861
return ConsoleApp.Create();
873862
}
863+
}
874864
""");
875-
876-
sb.AppendLine("}");
877-
}
878865
}
879866

880867
internal record CommandWithId(string? FieldType, Command Command, int Id)

src/ConsoleAppFramework/SourceGeneratorContexts.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
readonly record struct ConsoleAppFrameworkGeneratorOptions(bool DisableNamingConversion);
44

5-
readonly record struct DllReference(bool HasDependencyInjection, bool HasLogging, bool HasConfiguration, bool HasJsonConfiguration, bool HasHostAbstraction, bool HasHost);
5+
readonly record struct DllReference(bool HasDependencyInjection, bool HasLogging, bool HasConfiguration, bool HasJsonConfiguration, bool HasHost);

0 commit comments

Comments
 (0)