Robię dokładnie to, ale aby to zadziałało , musisz wykonać jakiś rodzaj generowania kodu.
W moim rozwiązaniu dodałem projekt „EnumeratedTypes”. Jest to aplikacja konsolowa, która pobiera wszystkie wartości z bazy danych i konstruuje z nich wyliczenia. Następnie zapisuje wszystkie wyliczenia w zestawie.
Kod generowania wyliczenia wygląda następująco:
// 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");
Moje inne projekty w rozwiązaniu odwołują się do tego wygenerowanego zestawu. W rezultacie mogę następnie używać dynamicznych wyliczeń w kodzie, wraz z inteligencją.
Następnie dodałem zdarzenie po kompilacji, aby po zbudowaniu tego projektu „EnumeratedTypes” uruchamiał się sam i generował plik „MyEnums.dll”.
Nawiasem mówiąc, warto zmienić kolejność kompilacji projektu, tak aby „EnumeratedTypes” było budowane jako pierwsze. W przeciwnym razie, gdy zaczniesz używać dynamicznie generowanego pliku .dll, nie będziesz mógł wykonać kompilacji, jeśli plik .dll zostanie kiedykolwiek usunięty. (Problem w rodzaju kurczaka i jajka - inne projekty w rozwiązaniu wymagają tego pliku .dll do poprawnego skompilowania i nie możesz utworzyć pliku .dll, dopóki nie utworzysz rozwiązania ...)
Większość powyższego kodu uzyskałem z tego artykułu MSDN .
Mam nadzieję że to pomoże!