AArnott / CodeGeneration.Roslyn

Assists in performing Roslyn-based code generation during a build.
Microsoft Public License
408 stars 59 forks source link

Better error message when generator constructor wasn't found #135

Closed amis92 closed 5 years ago

amis92 commented 5 years ago

Currently Error List view is very uninformative when an implementation of code generator is missing the XyzGenerator(AttributeData) constructor.

image

And build output:

Exception in file processing: System.MissingMethodException: Constructor on type 'Duplicator.DuplicateGenerator' not found.
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at CodeGeneration.Roslyn.Engine.DocumentTransform.FindCodeGenerators(ImmutableArray`1 nodeAttributes, Func`2 assemblyLoader)+MoveNext()
   at CodeGeneration.Roslyn.Engine.DocumentTransform.TransformAsync(CSharpCompilation compilation, SyntaxTree inputDocument, String projectDirectory, Func`2 assemblyLoader, IProgress`1 progress)
   at CodeGeneration.Roslyn.Engine.CompilationGenerator.Generate(IProgress`1 progress, CancellationToken cancellationToken)
AggregateException: One or more errors occurred. (Constructor on type 'Duplicator.DuplicateGenerator' not found.)
System.AggregateException: One or more errors occurred. (Constructor on type 'Duplicator.DuplicateGenerator' not found.) ---> System.MissingMethodException: Constructor on type 'Duplicator.DuplicateGenerator' not found.
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at CodeGeneration.Roslyn.Engine.DocumentTransform.FindCodeGenerators(ImmutableArray`1 nodeAttributes, Func`2 assemblyLoader)+MoveNext()
   at CodeGeneration.Roslyn.Engine.DocumentTransform.TransformAsync(CSharpCompilation compilation, SyntaxTree inputDocument, String projectDirectory, Func`2 assemblyLoader, IProgress`1 progress)
   at CodeGeneration.Roslyn.Engine.CompilationGenerator.Generate(IProgress`1 progress, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at CodeGeneration.Roslyn.Engine.CompilationGenerator.Generate(IProgress`1 progress, CancellationToken cancellationToken)
   at CodeGeneration.Roslyn.Generate.Program.Main(String[] args)
---> (Inner Exception #0) System.MissingMethodException: Constructor on type 'Duplicator.DuplicateGenerator' not found.
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at CodeGeneration.Roslyn.Engine.DocumentTransform.FindCodeGenerators(ImmutableArray`1 nodeAttributes, Func`2 assemblyLoader)+MoveNext()
   at CodeGeneration.Roslyn.Engine.DocumentTransform.TransformAsync(CSharpCompilation compilation, SyntaxTree inputDocument, String projectDirectory, Func`2 assemblyLoader, IProgress`1 progress)
   at CodeGeneration.Roslyn.Engine.CompilationGenerator.Generate(IProgress`1 progress, CancellationToken cancellationToken)<---

C:\Users\Amadeusz\.nuget\packages\codegeneration.roslyn.buildtime\0.5.15\build\CodeGeneration.Roslyn.BuildTime.targets(59,5): warning MSB3073: The command "dotnet codegen "@obj\Debug\netcoreapp2.1\TestGeneration.csproj.dotnet-codegen.rsp"" exited with code 3.
C:\Users\Amadeusz\.nuget\packages\codegeneration.roslyn.buildtime\0.5.15\build\CodeGeneration.Roslyn.BuildTime.targets(61,5): warning CGR1000: dotnet-codegen: Failed to generate the list of generated files. The tool didn't run successfully. Please check https://github.com/AArnott/CodeGeneration.Roslyn for usage instructions.