Example #1
0
        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);
        }
Example #2
0
 public static CilSyntax CreateCompiler(string documentPath)
 {
     return(CecilBackend.Create(documentPath));
 }
Example #3
0
        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);
        }