public DynamicAssembly Build(string instrumentedAssemblySavePath) { resolvePass = new List <Block>(); metadataPass = new List <Block>(); ilPass = new List <Block>(); string dir = null, file = null; if (instrumentedAssemblySavePath != null) { dir = Path.GetDirectoryName(instrumentedAssemblySavePath); file = Path.GetFileName(instrumentedAssemblySavePath); } BuildAssembly(AppDomain.CurrentDomain, dir, file); // Do processing that depends on all types being declared. foreach (Block block in resolvePass) { block(); } // Do processing that depends on all types being structurally complete // but possibly missing some metadata. foreach (Block block in metadataPass) { block(); } // Do processing to initialize method IL. foreach (Block block in ilPass) { block(); } // Create types. dynamicAssembly.CreateAllTypes(); return(dynamicAssembly); }