private bool DoRebuild(ref Assembly resource) { using (var stream = new MemoryStream(4096)) { var backend = new CecilBackend(); CilSyntax context = backend; CilDocumentSyntax docCode = context .BeginDocument() .Assembly(assemblyName) .EndAssembly() .AssemblyExtern(context.ResolutionScopeNs.DefineReferencedAssemblyName(new Name1("mscorlib"))) .Version(4, 0, 0, 0) .PublicKeyToken(new Bytes(new byte[] { 0xB7, 0x7A, 0x5C, 0x56, 0x19, 0x34, 0xE0, 0x89 })) .EndAssemblyExtern() ; docCode = DoGenerate(docCode); if (docCode == null) { return(false); } docCode.EndDocument(); var writer = backend as IAssemblyWriter; if (writer == null) { throw new InvalidOperationException("Backend does not support assembly writing"); } #if false var path = Path.Combine(Environment.CurrentDirectory, assemblyName + ".dll"); writer.Write(path); assembly = Assembly.LoadFrom(path); #else writer.Write(stream); assembly = Assembly.Load(stream.GetBuffer()); #endif } return(true); }
public static CilSyntax CreateCompiler(string documentPath) { return(CecilBackend.Create(documentPath)); }
protected override bool DoRebuild(ILogging logging, ref Assembly resource) { CilSyntax context = CecilBackend.Create(null); var builder = GetBuilder(); ((IAssemblyResolverParameters)context).AddSearchDirectory( Path.GetDirectoryName(derivedPath)); if (resourceDirs != null) { foreach (var resourceDir in resourceDirs) { logging.Write( new LogEntry { Severity = Severity.Verbose, Message = "Using additional assembly search directory: " + resourceDir, }); ((IAssemblyResolverParameters)context).AddSearchDirectory( resourceDir); } } var cilDocument = context .BeginDocument() .Assembly(AssemblyName.Name) .CustomAttribute( context.Types.Import(typeof(DerivedAssemblyMarker))) .EndAssembly() .AssemblyExtern(context.ResolutionScopeNs.DefineReferencedAssemblyName(new Name1("mscorlib"))) .Version(4, 0, 0, 0) .PublicKeyToken(new Bytes(new byte[] { 0xB7, 0x7A, 0x5C, 0x56, 0x19, 0x34, 0xE0, 0x89 })) .EndAssemblyExtern() .Module(new QStr(derivedPath)) ; cilDocument = Build(builder, logging, cilDocument); if (cilDocument == null) { logging.Write( new LogEntry { Severity = Severity.Error, Message = string.Format("Failed to compile assembly '{0}'.", derivedPath) }); return(false); } cilDocument.EndDocument(); var writer = context as IAssemblyWriter; if (writer == null) { throw new InvalidOperationException("Backend does not support assembly writing"); } writer.Write(derivedPath); logging.Write( new LogEntry { Severity = Severity.Verbose, Message = string.Format("Saved derived assembly {0}", AssemblyName.Name) }); return(true); }