简体   繁体   中英

Source Generator Testing

I'm trying to develop a source generator that I can theoretically add to my projects, and for the given project have it find classes that are marked up with a specific attribute, and then build a corresponding generated file for each.

I've set up unit tests that effectively use GeneratorDriver to instantiate and run generators and evaluate their output.

Problem

Classes exist in a secondary project referenced from the test project. The compilation does not appear to include syntaxTree's for the other project.

I've tried calling CreateCompilation with a simple program.cs body, and calling .AddReferences(MetadataReference.CreateFromFile(typeof(User).Assembly.Location) , and then passing that to the in driver.

At runtime, my syntax trees are still all the same (perhaps because I assume that reference is treated like an assembly reference.

I assume in normal situations, generators will run with the context of projects they are referenced from as an Analyzer , but for the purposes of my unit testing, is there a way I can effectively set the compilation to be another project, or reference another project (such that when I walk the different syntax trees, I can access those classes marked with attributes in an external assembly)?

So I managed to get this fixed by creating a workspace (with Microsoft.CodeAnalysis.Workspaces) and loaded my other project in, got the compilation from that, and passed that to my GeneratorDriver .

My Generator isn't working 100% yet, but this definitely got me past the hurdle.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM