Utilice EnumBuilder para crear enums dinámicamente. Esto requeriría el uso de Reflection.
PASO 1: CREAR ENUM USO DE MONTAJE/ENUM CONSTRUCTOR
// Get the current application domain for the current thread.
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "TempAssembly" assembly. For a single-
// module assembly, the module has the same name as the assembly.
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
// Define a public enumeration with the name "Elevation" and an
// underlying type of Integer.
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
// Define two members, "High" and "Low".
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
// Create the type and save the assembly.
Type finished = eb.CreateType();
ab.Save(aName.Name + ".dll");
PASO 2: EL USO DEL ENUM CREADO
System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom("TempAssembly.dll");
System.Type enumTest = ass.GetType("Elevation");
string[] values = enumTest .GetEnumNames();
Espero que ayude
estoy de acuerdo. Todas las referencias a los valores individuales de una enumeración se convierten a literales numéricos en tiempo de compilación. Esto puede crear posibles problemas de control de versiones. Sin embargo, no es imposible. En algún lugar que leo CodeDom puede ayudarte, pero ten en cuenta que es mucho trabajo. No estoy seguro de si le preocupa el esfuerzo. – Prithis
+1 para [T4] (http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx) – elimad