Skip to content

Problem with OnBeforeGeneration #226

@wreuel

Description

@wreuel

I have the following MyGenarationSpec:

using My.Project.Common.Data;
using My.Project.Domain.Dto;
using My.Project.ExternalServices.Data.Profiles.Base;
using My.Project.Services.Tracker;
using System.Reflection;
using TypeGen.Core.Converters;
using TypeGen.Core.SpecGeneration;

namespace My.Project.Specs
{
    public class MyGenerationSpec : GenerationSpec
    {
        public override void OnBeforeGeneration(OnBeforeGenerationArgs args)
        {
            args.GeneratorOptions.BaseOutputDirectory = "../myProject/src/models/";
            args.GeneratorOptions.FileNameConverters = new TypeNameConverterCollection(new PascalCaseFileNameConverter());
            args.GeneratorOptions.FileHeading = "";
            args.GeneratorOptions.PropertyNameConverters = new MemberNameConverterCollection(new PascalCaseToCamelCaseConverter());

            AddInterface(typeof(ResponseDto), "Common");
            AddInterface(typeof(ResponseGenericDto<>), "Common");
            AddInterface(typeof(StationGroup), "Data");
            AddInterface(typeof(StationClient), "Data");

            Assembly[] currentAssemblies = AppDomain.CurrentDomain.GetAssemblies()
                    .Where(d => !string.IsNullOrEmpty(d.FullName) && d.FullName.Contains("My.Project", StringComparison.OrdinalIgnoreCase)).ToArray();

            var enumTypes = currentAssemblies
              .SelectMany(x => x.GetTypes()
                                  .Where(t => !string.IsNullOrEmpty(t.FullName)
                                              && t.FullName.Contains("My.Project")
                                              && t.IsEnum)
                          )
              .Distinct()
              .ToList();

            foreach (var item in enumTypes)
            {
                AddEnum(item, "Enums");
            }


            Assembly[] domainAssemblies = (from x in currentAssemblies
                                           where x.GetTypes().Contains(typeof(OrderDto))
                                           select x).ToArray();

            var domainDto = domainAssemblies
               .SelectMany(x => x
                   .GetTypes()
                   .Where(d => d.Name.EndsWith("DTO", StringComparison.OrdinalIgnoreCase)
                           && !d.Name.Equals("ResponseDto")))
               .Distinct()
               .ToList();

            foreach (var item in domainDto)
            {
                AddInterface(item, "Dto");
            }

            var dtosApplicationData = currentAssemblies
             .SelectMany(x => x
                 .GetTypes()
                 .Where(d => d.Name.EndsWith("Dto", StringComparison.OrdinalIgnoreCase)
                            ))

             .Distinct()
            .ToList();

            foreach (var dto in dtosApplicationData)
            {
                AddInterface(dto, "Dto");
            }

            var responses = currentAssemblies
             .SelectMany(x => x
                 .GetTypes()
                 .Where(d => (d.Name.EndsWith("Response", StringComparison.OrdinalIgnoreCase)))
             .Distinct()
             .ToList();

            var configs = currentAssemblies
              .SelectMany(x => x
                  .GetTypes()
                  .Where(d =>
                  (d.Name.EndsWith("Configurations")
                  || d.Name.EndsWith("WebServiceConfig"))
                  && !d.Name.Equals("ReloadConfigurationsCommand", StringComparison.OrdinalIgnoreCase)))
              .Distinct()
              .ToList();

            responses.AddRange(configs);

            foreach (var response in responses)
            {
                AddInterface(response, "Response");
            }

            var requests = currentAssemblies
             .SelectMany(x => x
                 .GetTypes()
                 .Where(d => d.Name.EndsWith("Request", StringComparison.OrdinalIgnoreCase)))
             .Distinct()
            .ToList();

            foreach (var request in requests)
            {
                AddInterface(request, "Request");
            }
        }
    }
}


And when I do the build or rebuild, knowing that I have the following command to ben run on the .csproj

<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
	<Exec Command="dotnet-typegen generate" ContinueOnError="true" IgnoreExitCode="true" />
</Target>

I'm getting the following error:


28>Generating files for project "."...
28>Unhandled exception: System.MissingMethodException: Method not found: 'Boolean System.MemoryExtensions.Contains(System.ReadOnlySpan`1<!!0>, !!0, System.Collections.Generic.IEqualityComparer`1<!!0>)'.
28>   at My.Project.Specs.MyGenerationSpec.<>c.<OnBeforeGeneration>b__0_2(Assembly x)
28>   at System.Linq.Enumerable.ArrayWhereIterator`1.ToArray(ReadOnlySpan`1 source, Func`2 predicate)
28>   at System.Linq.Enumerable.ArrayWhereIterator`1.ToArray()
28>   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
28>   at My.Project.Specs.MyGenerationSpec.OnBeforeGeneration(OnBeforeGenerationArgs args) in C:\Dev\KDSService\src\My.Project\Specs\MyGenerationSpec.cs:line 43
28>   at TypeGen.Core.Generator.Generator.Generate(IEnumerable`1 generationSpecs) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Core\Generator\Generator.cs:line 149
28>   at TypeGen.Cli.Ui.Presenter.GenerateSingle(String projectFolder, String configPath, String outputFolder) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Ui\Presenter.cs:line 113
28>   at TypeGen.Cli.Ui.Presenter.GeneratePrivate(Boolean verbose, IReadOnlyCollection`1 projectFolderPaths, IReadOnlyCollection`1 configPaths, String outputFolder) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Ui\Presenter.cs:line 78
28>   at TypeGen.Cli.Ui.Presenter.<>c__DisplayClass9_0.<Generate>b__0() in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Ui\Presenter.cs:line 61
28>   at TypeGen.Cli.Ui.Validation.ValidationResult.Match(Action onSuccess, Action`1 onFailure) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Ui\Validation\ValidationResult.cs:line 32
28>   at TypeGen.Cli.Ui.Presenter.Generate(Boolean verbose, IReadOnlyCollection`1 projectFolderPaths, IReadOnlyCollection`1 configPaths, String outputFolder) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Ui\Presenter.cs:line 59
28>   at TypeGen.Cli.Application.<BuildCommandLine>b__5_1(Boolean v, List`1 p, List`1 c, String o) in C:\Users\jburz\Google Drive\Projects\TypeGen_OS\src\TypeGen\TypeGen.Cli\Application.cs:line 98
28>   at System.CommandLine.Handler.<>c__DisplayClass5_0`4.<SetHandler>b__0(InvocationContext context)
28>   at System.CommandLine.Invocation.AnonymousCommandHandler.Invoke(InvocationContext context)
28>   at System.CommandLine.Invocation.AnonymousCommandHandler.InvokeAsync(InvocationContext context)
28>   at System.CommandLine.Invocation.InvocationPipeline.<>c__DisplayClass4_0.<<BuildInvocationChain>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass17_0.<<UseParseErrorReporting>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass12_0.<<UseHelp>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass22_0.<<UseVersionOption>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass19_0.<<UseTypoCorrections>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<UseSuggestDirective>b__18_0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass16_0.<<UseParseDirective>b__0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c.<<RegisterWithDotnetSuggest>b__5_0>d.MoveNext()
28>--- End of stack trace from previous location ---
28>   at System.CommandLine.Builder.CommandLineBuilderExtensions.<>c__DisplayClass8_0.<<UseExceptionHandler>b__0>d.MoveNext()
28>

But the ts files are generate correctly. What is that? How can I fix any ideias?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions