Eiffel Implementation
There are a few topics specific to the implementation of the Eiffel CodeDom Provider that are worth mentioning.
Multiple Classes File
The Eiffel compiler expects that there is only one class per source file (file with extension .e), however the CodeDom interface specification requires multiple classes to be generated in the same file (actually in the same stream). The Eiffel CodeDom Provider code generator generates files with the extension .es which may contain multiple class definitions. Each class definition is separated with a special marker that the Eiffel CodeDom Provider compiler will parse to create multiple .e files - each containing a single class definition - prior to calling the command line Eiffel compiler.
Eiffel for ASP.NET includes the eSplitter utility which can 'split' Eiffel multi-class files (.es files) into single class files (.e files).
Inheritance Snippet
Any type defined in a CodeDom tree to be consumed by the Eiffel CodeDom Provider may include one (and only one) snippet member that includes an inheritance clause declaration. This inheritance snippet must start with the keyword inherit and follows the Eiffel syntax for inheritance clauses. All the feature adaptations available in the Eiffel programming language may be used in such a snippet (rename, export, undefine, redefine, select).
Indexing Snippet and Precompiled Libraries
Another interesting snippet member is the indexing clause snippet which must start with the indexing keyword and follows the Eiffel syntax for indexing clauses. This snippet may include the indexing clause precompile_definition_file which can be used to specify the path to the precompiled library ACE file to be used by the Eiffel CodeDom Compiler. This is specially useful in ASP.NET pages where each page can specify which precompiled ACE file to use when compiling it. This path will be used instead of the path defined in the configuration file.
Eiffel Configuration
There are several Eiffel specific settings that can be set in the Eiffel CodeDom Provider which will affect the generated code as well as the CodeDom compiler behavior. These settings are covered in the Configuration section.