Я делаю именно эту вещь, но вам нужно , чтобы выполнить какое-то генерирование кода, чтобы это работало.
В моём решении я добавил проект "EnumeratedTypes". Это консольное приложение, которое получает все значения из базы данных и создает из них перечисления. Затем он сохраняет все перечисления в сборку.
Код генерации перечисления выглядит так:
// 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 name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name,
AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "MyEnums" assembly.
// For a single-module assembly, the module has the same name as the assembly.
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name,
name.Name + ".dll");
// Define a public enumeration with the name "MyEnum" and an underlying type of Integer.
EnumBuilder myEnum = moduleBuilder.DefineEnum("EnumeratedTypes.MyEnum",
TypeAttributes.Public, typeof(int));
// Get data from database
MyDataAdapter someAdapter = new MyDataAdapter();
MyDataSet.MyDataTable myData = myDataAdapter.GetMyData();
foreach (MyDataSet.MyDataRow row in myData.Rows)
{
myEnum.DefineLiteral(row.Name, row.Key);
}
// Create the enum
myEnum.CreateType();
// Finally, save the assembly
assemblyBuilder.Save(name.Name + ".dll");
Мои другие проекты в решении ссылаются на эту сгенерированную сборку. В результате я могу использовать динамические перечисления в коде, дополненные intellisense.
Затем я добавил событие после сборки, чтобы после того, как этот проект «EnumeratedTypes» был собран, он запустился сам и сгенерировал файл «MyEnums.dll».
Кстати, это помогает изменить порядок сборки вашего проекта так, чтобы сначала был построен EnumeratedTypes. В противном случае, как только вы начнете использовать динамически сгенерированный DLL-файл, вы не сможете выполнить сборку, если DLL-файл когда-либо будет удален. (Проблема типа "курица и яйцо" - другим вашим проектным решениям нужен этот .dll для правильной сборки, и вы не можете создать .dll, пока не создадите свое решение ...)
Я получил большую часть приведенного выше кода из этой статьи MSDN .
Надеюсь, это поможет!