.NET Compiler Platform "Roslyn"
The compilers are available via the traditional command-line programs and also as APIs, which are available natively from within .NET code.
Recently, I used Roslyn for updating hundreds of files to support an addition to our logging framework.
I needed to add a new member in each class that was using the logger and modify all the calls to the logger, of which there were several hundreds.
We came up with two ways of handling this challenge.
After reading a class into an object representing it, one possible way of adding amember is to supply a syntactical definition of a new member, and then re-generate back the source code for the class.
The problem with this approach was the relative difficulty of configuring a new member correctly.
Here is how it might look:
Generating the code:
private readonly OtherClass _b = new OtherClass(1, “abc”);
Another option, which is more direct, was to simply get the properties of the class and use them.
For example, we know where the class definition ends and we can append a new line containing the member definition.
Here is how it looks:
Get class details:Insert the new line (new member):After that, replacing the calls to the new logger is a simple matter of search – replace.