Yes, it is possible. You can use the following code as inspiration:
(which has been generated by https://cecilifier.me/?gistid=0dbc6d733aa4e09f07b332ba4f72c592)
using Mono.Cecil;
using Mono.Cecil.Cil;
using Mono.Cecil.Rocks;
using System;
using System.Linq;
using BindingFlags = System.Reflection.BindingFlags;
using Cecilifier.Runtime;
public class SnippetRunner
{
public static void Main(string[] args)
{
var assembly = AssemblyDefinition.CreateAssembly(new AssemblyNameDefinition("name", Version.Parse("1.0.0.0")), "moduleName", ModuleKind.Dll);
var TestEnum1 = new TypeDefinition("", "TestEnum", TypeAttributes.Private | TypeAttributes.Sealed, assembly.MainModule.ImportReference(typeof(System.Enum)));
assembly.MainModule.Types.Add(TestEnum1);
var valueField_TestEnum = new FieldDefinition("value__", FieldAttributes.SpecialName | FieldAttributes.RTSpecialName | FieldAttributes.Public, assembly.MainModule.TypeSystem.Int32);
TestEnum1.Fields.Add(valueField_TestEnum);
var em_TestEnum_2_First = new FieldDefinition("First", FieldAttributes.Static | FieldAttributes.Literal | FieldAttributes.Public | FieldAttributes.HasDefault, TestEnum1) { Constant = 0 };
TestEnum1.Fields.Add(em_TestEnum_2_First);
var em_TestEnum_3_Second = new FieldDefinition("Second", FieldAttributes.Static | FieldAttributes.Literal | FieldAttributes.Public | FieldAttributes.HasDefault, TestEnum1) { Constant = 1 };
TestEnum1.Fields.Add(em_TestEnum_3_Second);
var em_TestEnum_4_Third = new FieldDefinition("Third", FieldAttributes.Static | FieldAttributes.Literal | FieldAttributes.Public | FieldAttributes.HasDefault, TestEnum1) { Constant = 2 };
TestEnum1.Fields.Add(em_TestEnum_4_Third);
var t1 = new TypeDefinition("", "C", TypeAttributes.AnsiClass | TypeAttributes.BeforeFieldInit | TypeAttributes.NotPublic, assembly.MainModule.TypeSystem.Object);
assembly.MainModule.Types.Add(t1);
t1.BaseType = assembly.MainModule.TypeSystem.Object;
var C_ctor_ = new MethodDefinition(".ctor", MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.RTSpecialName | MethodAttributes.SpecialName, assembly.MainModule.TypeSystem.Void);
t1.Methods.Add(C_ctor_);
var il5 = C_ctor_.Body.GetILProcessor();
var Ldarg_06 = il5.Create(OpCodes.Ldarg_0);
il5.Append(Ldarg_06);
var Call7 = il5.Create(OpCodes.Call, assembly.MainModule.ImportReference(TypeHelpers.DefaultCtorFor(t1.BaseType)));
il5.Append(Call7);
var Ret8 = il5.Create(OpCodes.Ret);
il5.Append(Ret8);
var C_Foo_testenum = new MethodDefinition("Foo", MethodAttributes.Private | MethodAttributes.HideBySig, assembly.MainModule.TypeSystem.Void);
t1.Methods.Add(C_Foo_testenum);
var il_C_Foo_testenum = C_Foo_testenum.Body.GetILProcessor();
var t9 = new ParameterDefinition("t", ParameterAttributes.None, TestEnum1);
C_Foo_testenum.Parameters.Add(t9);
var Ret10 = il_C_Foo_testenum.Create(OpCodes.Ret);
il_C_Foo_testenum.Append(Ret10);
assembly.Write(args[0]);
}
}