CodeDOM is a framework which can be used to create an (abstract) expression tree representing real code structures (for example, classes, statements, etc.) in a language-independent way. This means if you construct an expression tree, you can use (or write) code generators to output the same logical structure in multiple different target languages. Language generators exist for VB.NET, C#, and JScript, but you can also create your own.
What is CodeDOM?
CodeDOM is a .NET library from Microsoft which:
Gives you a way to represent source code as expression objects
Provides some pre-built generators to translate the expressions into raw source code
Makes it easy to compile the generated source to executable code
Here is an excerpt from MSDN describing CodeDOM:
The CodeDOM provides types that represent many common types of source code elements. You can design a program that builds a source code model using CodeDOM elements to assemble an object graph. This object graph can be rendered as source code using a CodeDOM code generator for a supported programming language. The CodeDOM can also be used to compile source code into a binary assembly.
Some common uses for the CodeDOM include:
Templated code generation: generating code for ASP.NET, XML Web services client proxies, code wizards, designers, or other code-emitting mechanisms.
Dynamic compilation: supporting code compilation in single or multiple languages.
If you look into CodeDOM you will probably encounter a lot about abstract syntax trees (ASTs). This is the technical term for an expression tree in this context (originating from the way code generators, parsers, and compilers are written). If you plan to get into CodeDOM it helps to understand the basic concept; Wikipedia has a reasonable article on the subject.
What type of question should use this tag?
Questions should use this tag if they relate to the use, comprehension, or interaction with the CodeDOM library. It could also be used on questions relating to generation of code using a document object model (DOM) strategy similar to that provided by the Microsoft CodeDOM library.
Further Reading
MSDN's introduction to CodeDOM actually provides a pretty good overview of the library and its use.
There is a nice, compact example of creating an entity generator using CodeDOM on GeeksWithBlogs
Piyush S Bhatnagar has posted a decent article on CodeProject, Dynamic Code Generation with CodeDOM, which breaks out common tasks you might wish to perform
If you want to get a good overview of the some of the theory behind abstract syntax trees (AST's), language design, and parsing / compiler strategy (for context) then Terence Parr (author of the ANTLR Parser Generator) has written a very accessible book (even for casual programmers!) called Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (ISBN 978-1-93435-645-6).