コード例 #1
0
ファイル: Program.cs プロジェクト: torkelo/ravendb
        static int Main(string[] args)
        {
            try
            {
                var merge = new ILMerge
                {
                    OutputFile = "RavenDb.exe",
                    TargetKind = ILMerge.Kind.SameAsPrimaryAssembly,
                    Version = new Version(4, 0)
                };
                merge.SetInputAssemblies(
                    new[]
                        {
                            @"Raven.Server.exe",
                            @"Raven.Database.dll",
                            @"Esent.Interop.dll",
                            @"ICSharpCode.NRefactory.dll",
                            @"Lucene.Net.dll",
                            @"log4net.dll",
                            @"Newtonsoft.Json.dll",

                        });
                merge.SetTargetPlatform("4", Path.GetDirectoryName(typeof(object).Assembly.Location));
                merge.Merge();
                return 0;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return -1;
            }
        }
コード例 #2
0
        public void LinkLibrary()
        {
            ILMerge merger = new ILMerge();

            merger.OutputFile = _outputFile;
            _inputAssemblies.Insert(0, _inputFile);
            merger.SetInputAssemblies((string[])_inputAssemblies.ToArray());
            merger.SetSearchDirectories(new string[] { "..\\runtime", "..\\library" });
            merger.TargetKind = ILMerge.Kind.Dll;
            merger.Merge();
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: VirtueMe/ravendb
	  private static void Merge(string outputFile, string[] inputAssemblies)
		{
			var merge = new ILMerge
			{
				OutputFile = outputFile,
				TargetKind = ILMerge.Kind.SameAsPrimaryAssembly,
				Version = new Version(4, 0),
			};
			merge.SetInputAssemblies(inputAssemblies);
			merge.SetTargetPlatform("4", Path.GetDirectoryName(typeof(object).Assembly.Location));
			merge.Merge();
		}
コード例 #4
0
        private static void Main(string[] args)
        {
            try
            {
                var commandLineProcessor = new CommandLineProcessor();
                var options = commandLineProcessor.Process(args);
                
                var semanticVersionAnalyzer = new SemanticVersionAnalyzer();
                var result = semanticVersionAnalyzer.Analyze(options.PreviousAssembly, options.CurrentAssembly, options.ProposedVersionNumber);

                if (result.BreakingChangesDetected)
                {
                    var dynamicAssembly = new CodeGenerator().GenerateVersionDetailsDynamicAssembly(options.CurrentAssembly, result.VersionNumber, result.VersionNumber, result.VersionNumber);

                    var ilMerge = new ILMerge
                    {
                        TargetKind = ILMerge.Kind.Dll,
                        AttributeFile = dynamicAssembly,
                        OutputFile = options.OutputFile
                    };

                    ilMerge.SetInputAssemblies(new[] { options.CurrentAssembly } );
                    ilMerge.Merge();

                    Console.WriteLine("##teamcity[buildNumber '" + result.VersionNumber + "']");
                }
            }
            catch (Exception exception)
            {
                var aggregateException = exception as AggregateException;
                if (aggregateException != null)
                {
                    foreach (var e in aggregateException.InnerExceptions)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
                else
                {
                    Console.WriteLine(exception.Message);
                }
            }
        }
コード例 #5
0
        protected virtual void MergeStaticProxyFactoryWithProxies(Assembly staticProxyAssembly, Assembly proxyAssembly, Assembly[] referenceAssemblies, string outputPath)
        {
            ILMerge merger = new ILMerge();

            List<string> searchDirectories = new List<string>(referenceAssemblies.Length);
            foreach(Assembly referenceAssembly in referenceAssemblies )
            {
                string searchDirectory = Path.GetDirectoryName(referenceAssembly.Location);
                if (!searchDirectories.Contains(searchDirectory))
                {
                    searchDirectories.Add(searchDirectory);
                }
            }

            merger.SetSearchDirectories(searchDirectories.ToArray());
            merger.SetInputAssemblies(new string[] { staticProxyAssembly.Location, proxyAssembly.Location });
            merger.OutputFile = outputPath;
            merger.Merge();
        }
コード例 #6
0
ファイル: SharpPakApp.cs プロジェクト: alexey-bez/SharpDX
        /// <summary>
        /// Performs packing.
        /// </summary>
        public void Run()
        {
            // Steps
            // 1) Mono.Cecil: Determine assembly dependencies
            // 2) ILMerge: Merge exe into a single assembly
            // 3) Mono.Linker
            var includeMergeListRegex = new string[] { @"SharpDX\..*" };

            // Step 1 : Mono.Cecil: Determine assembly dependencies
            var assembly = AssemblyDefinition.ReadAssembly(MainAssembly);
            var corlib = (AssemblyNameReference)assembly.MainModule.TypeSystem.Corlib;
            bool isNet40 = corlib.Version.Major == 4;

            var paths = new List<string>();

            var fromDirectory = Path.GetDirectoryName(assembly.MainModule.FullyQualifiedName);

            // Load SharpDX assemblies
            AddAssemblies(assembly, paths, fromDirectory, includeMergeListRegex);

            // Load assemblies to link
            foreach (var assemblyToLinkName in AssembliesToLink)
            {
                var assemblyToLink = AssemblyDefinition.ReadAssembly(assemblyToLinkName);
                paths.Add(assemblyToLink.MainModule.FullyQualifiedName);
            }


            // Step 2: ILMerge: Merge exe into a single assembly
            var merge = new ILMerge();

            String[] files = paths.ToArray();

            if (!Directory.Exists(OutputDirectory))
                Directory.CreateDirectory(OutputDirectory);

            //Here we get the first file name (which was the .exe file) and use that
            // as the output
            String strOutputFile = System.IO.Path.GetFileName(files[0]);

            merge.OutputFile = OutputDirectory + "\\" + strOutputFile;
            merge.SetInputAssemblies(files);
            merge.DebugInfo = false;
            merge.CopyAttributes = true;
            merge.AllowMultipleAssemblyLevelAttributes = true;
            merge.XmlDocumentation = false;

            // Special case for v4 framework
            // See http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
            if (isNet40)
            {
                // Retrieve the install root path for the framework
                string installRoot = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\.NetFramework", false).GetValue("InstallRoot").ToString();
                var directorties = Directory.GetDirectories(installRoot, "v4.*");
                if (directorties.Length == 0)
                    UsageError(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Cannot found any .Net 4.0 directory from [{0}] ", installRoot));
                merge.SetTargetPlatform("v4", directorties[0]);                
            }

            merge.Merge();

            // Step 3: Mono.Linker
            if (!NoLinker)
            {
                var pipeline = GetStandardPipeline();
                var context = new LinkContext(pipeline) {CoreAction = AssemblyAction.Skip, OutputDirectory = OutputDirectory};
                context.OutputDirectory = OutputDirectory;

                var mainAssemblyDirectory = new DirectoryInfo(Path.GetDirectoryName(Path.GetFullPath(MainAssembly)));
                context.Resolver.AddSearchDirectory(mainAssemblyDirectory.FullName);

                // Load assembly merged previously by ILMerge
                var mergedAssemblyDefinition = context.Resolve(merge.OutputFile);

                // Create Mono.Linker default pipeline
                pipeline = GetStandardPipeline();
                pipeline.PrependStep(new ResolveFromAssemblyStep(mergedAssemblyDefinition));

                // Add custom step for ComObject constructors
                pipeline.AddStepBefore(typeof (SweepStep), new ComObjectStep());

                pipeline.Process(context);
            }

            Console.WriteLine("Assembly successfully packed to [{0}]", merge.OutputFile);
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: authorunknown/SpecFlow
        private static void CreateSignedParser(string gherkinParserFullPath, Version version, string keyFullPath, string outputFileFullPath)
        {
            Console.WriteLine("Generating signed parser...");

            ILMerge ilMerge = new ILMerge();
            ilMerge.KeyFile = keyFullPath;
            ilMerge.Version = version;
            ilMerge.SetInputAssemblies(new[] { gherkinParserFullPath });

            ilMerge.OutputFile = outputFileFullPath;
            ilMerge.TargetKind = ILMerge.Kind.Dll;

            ilMerge.Log = true;

            ilMerge.Merge();

            Console.WriteLine();
        }
コード例 #8
0
        static void Main(string[] args)
        {
#if !DEBUG
            Version networkCommsVersion =
                new Version(Assembly.ReflectionOnlyLoad("NetworkCommsDotNet").FullName.
                    Split(',').
                    Where(s => s.Split('=').Length == 2).
                    ToDictionary(s => s.Split('=')[0].Trim(), s => s.Split('=')[1].Trim())["Version"]);

            string targetPlatform = "v2";
            string msCoreLibDirectory = @"C:\Windows\Microsoft.NET\Framework\v2.0.50727";

            bool coreBuildEnabled = false;
            bool completeBuildEnabled = true;

            #region Merge Core
            if (coreBuildEnabled)
            {
                Directory.CreateDirectory("MergedCore");
                File.Delete(@"MergedCore\MergeLog.txt");
                ILMerge coreMerge = new ILMerge();

                List<string> coreAssembles = new List<string>();
                coreAssembles.Add("NetworkCommsDotNet.dll");
                coreAssembles.Add("protobuf-net.dll");
                coreAssembles.Add("ProtobufSerializer.dll");

                coreMerge.SetInputAssemblies(coreAssembles.ToArray());
                coreMerge.Version = networkCommsVersion;

                coreMerge.TargetKind = ILMerge.Kind.Dll;
                coreMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                coreMerge.XmlDocumentation = true;

                coreMerge.KeyFile = "networkcomms.net.snk";

                coreMerge.OutputFile = @"MergedCore\NetworkCommsDotNetCore.dll";

                coreMerge.Log = true;
                coreMerge.LogFile = @"MergedCore\MergeLog.txt";

                coreMerge.Merge();
            }
            #endregion

            #region Merge Complete
            if (completeBuildEnabled)
            {
                Directory.CreateDirectory("MergedComplete");
                File.Delete(@"MergedComplete\MergeLog.txt");
                ILMerge completeMerge = new ILMerge();

                List<string> completeAssembles = new List<string>();
                completeAssembles.Add("NetworkCommsDotNet.dll");
                completeAssembles.Add("protobuf-net.dll");
                completeAssembles.Add("ProtobufSerializer.dll");
                completeAssembles.Add("ICSharpCode.SharpZipLib.dll");
                completeAssembles.Add("SharpZipLibCompressor.dll");
                //completeAssembles.Add("QuickLZCompressor.dll");
                completeAssembles.Add("InTheHand.Net.Personal.dll");

                completeMerge.SetInputAssemblies(completeAssembles.ToArray());
                completeMerge.Version = networkCommsVersion;

                completeMerge.TargetKind = ILMerge.Kind.Dll;
                completeMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                completeMerge.XmlDocumentation = true;

                completeMerge.KeyFile = "networkcomms.net.snk";

                completeMerge.OutputFile = @"MergedComplete\NetworkCommsDotNetComplete.dll";

                completeMerge.Log = true;
                completeMerge.LogFile = @"MergedComplete\MergeLog.txt";

                completeMerge.Merge();
            }
            #endregion
#endif
        }
コード例 #9
0
        static void Main(string[] args)
        {
#if !DEBUG
            Version networkCommsVersion =
                new Version(Assembly.ReflectionOnlyLoad("NetworkCommsDotNet").FullName.
                            Split(',').
                            Where(s => s.Split('=').Length == 2).
                            ToDictionary(s => s.Split('=')[0].Trim(), s => s.Split('=')[1].Trim())["Version"]);

            string targetPlatform     = "v4";
            string msCoreLibDirectory = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319";

            bool coreBuildEnabled     = false;
            bool completeBuildEnabled = true;

            #region Merge Core
            if (coreBuildEnabled)
            {
                Directory.CreateDirectory("MergedCore");
                File.Delete(@"MergedCore\MergeLog.txt");

                ILMerge coreMerge = new ILMerge();

                List <string> coreAssembles = new List <string>();
                coreAssembles.Add("NetworkCommsDotNet.dll");
                coreAssembles.Add("protobuf-net.dll");
                coreAssembles.Add("ProtobufSerializer.dll");

                coreMerge.SetInputAssemblies(coreAssembles.ToArray());
                coreMerge.Version = networkCommsVersion;

                coreMerge.TargetKind = ILMerge.Kind.Dll;
                coreMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                coreMerge.XmlDocumentation = true;

                coreMerge.KeyFile = "networkcomms.net.snk";

                coreMerge.OutputFile = @"MergedCore\NetworkCommsDotNetCore.dll";

                coreMerge.Log     = true;
                coreMerge.LogFile = @"MergedCore\MergeLog.txt";

                coreMerge.Merge();
            }
            #endregion

            #region Merge Complete
            if (completeBuildEnabled)
            {
                Directory.CreateDirectory("MergedComplete");
                File.Delete(@"MergedComplete\MergeLog.txt");

                ILMerge completeMerge = new ILMerge();

                List <string> completeAssembles = new List <string>();
                completeAssembles.Add("NetworkCommsDotNet.dll");
                completeAssembles.Add("protobuf-net.dll");
                completeAssembles.Add("ProtobufSerializer.dll");
                completeAssembles.Add("ICSharpCode.SharpZipLib.dll");
                completeAssembles.Add("SharpZipLibCompressor.dll");
                completeAssembles.Add("QuickLZCompressor.dll");
                completeAssembles.Add("InTheHand.Net.Personal.dll");
                completeAssembles.Add("JSONSerializer.dll");
                completeAssembles.Add("Newtonsoft.Json.dll");

                completeAssembles.Add("DistributedFileSystem.dll");
                completeAssembles.Add("RemoteProcedureCalls.dll");

                completeMerge.SetInputAssemblies(completeAssembles.ToArray());
                completeMerge.Version = networkCommsVersion;

                completeMerge.TargetKind = ILMerge.Kind.Dll;
                completeMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                completeMerge.XmlDocumentation = true;

                completeMerge.KeyFile = "networkcomms.net.snk";

                completeMerge.OutputFile = @"MergedComplete\NetworkCommsDotNetComplete.dll";

                completeMerge.Log     = true;
                completeMerge.LogFile = @"MergedComplete\MergeLog.txt";

                completeMerge.Merge();
            }
            #endregion
#endif
        }
コード例 #10
0
        /// <summary>
        /// Performs packing.
        /// </summary>
        public void Run()
        {
            // Steps
            // 1) Mono.Cecil: Determine assembly dependencies
            // 2) ILMerge: Merge exe into a single assembly
            // 3) Mono.Linker
            var includeMergeListRegex = new string[] { @"SharpDX\..*" };

            // Step 1 : Mono.Cecil: Determine assembly dependencies
            var  assembly = AssemblyDefinition.ReadAssembly(MainAssembly);
            var  corlib   = (AssemblyNameReference)assembly.MainModule.TypeSystem.CoreLibrary;
            bool isNet40  = corlib.Version.Major == 4;

            var paths = new List <string>();

            var fromDirectory = Path.GetDirectoryName(assembly.MainModule.FullyQualifiedName);

            // Load SharpDX assemblies
            AddAssemblies(assembly, paths, fromDirectory, includeMergeListRegex);

            // Load assemblies to link
            foreach (var assemblyToLinkName in AssembliesToLink)
            {
                var assemblyToLink = AssemblyDefinition.ReadAssembly(assemblyToLinkName);
                paths.Add(assemblyToLink.MainModule.FullyQualifiedName);
            }

            // Step 2: ILMerge: Merge exe into a single assembly
            var merge = new ILMerge();

            String[] files = paths.ToArray();

            if (!Directory.Exists(OutputDirectory))
            {
                Directory.CreateDirectory(OutputDirectory);
            }

            //Here we get the first file name (which was the .exe file) and use that
            // as the output
            String strOutputFile = System.IO.Path.GetFileName(files[0]);

            merge.OutputFile = OutputDirectory + "\\" + strOutputFile;
            merge.SetInputAssemblies(files);
            merge.DebugInfo      = false;
            merge.CopyAttributes = true;
            merge.AllowMultipleAssemblyLevelAttributes = true;
            merge.XmlDocumentation = false;

            // Special case for v4 framework
            // See http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
            if (isNet40)
            {
                // Retrieve the install root path for the framework
                string installRoot  = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\.NetFramework", false).GetValue("InstallRoot").ToString();
                var    directorties = Directory.GetDirectories(installRoot, "v4.*");
                if (directorties.Length == 0)
                {
                    UsageError(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Cannot found any .Net 4.0 directory from [{0}] ", installRoot));
                }
                merge.SetTargetPlatform("v4", directorties[0]);
            }

            merge.Merge();

            // Step 3: Mono.Linker
            if (!NoLinker)
            {
                var pipeline = GetStandardPipeline();
                var context  = new LinkContext(pipeline)
                {
                    CoreAction = AssemblyAction.Skip, OutputDirectory = OutputDirectory
                };
                context.OutputDirectory = OutputDirectory;

                var mainAssemblyDirectory = new DirectoryInfo(Path.GetDirectoryName(Path.GetFullPath(MainAssembly)));
                context.Resolver.AddSearchDirectory(mainAssemblyDirectory.FullName);

                // Load assembly merged previously by ILMerge
                var mergedAssemblyDefinition = context.Resolve(merge.OutputFile);

                // Create Mono.Linker default pipeline
                pipeline = GetStandardPipeline();
                pipeline.PrependStep(new ResolveFromAssemblyStep(mergedAssemblyDefinition));

                // Add custom step for ComObject constructors
                pipeline.AddStepBefore(typeof(SweepStep), new ComObjectStep());

                pipeline.Process(context);
            }

            Console.WriteLine("Assembly successfully packed to [{0}]", merge.OutputFile);
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: ErezWeiss/ElbitChatClient
        static void Main(string[] args)
        {
#if !DEBUG
            Version networkCommsVersion =
                new Version(Assembly.ReflectionOnlyLoad("NetworkCommsDotNet").FullName.
                            Split(',').
                            Where(s => s.Split('=').Length == 2).
                            ToDictionary(s => s.Split('=')[0].Trim(), s => s.Split('=')[1].Trim())["Version"]);

            string targetPlatform     = "v4";
            string msCoreLibDirectory = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v4.4";

            bool coreBuildEnabled     = false;
            bool completeBuildEnabled = false;

            #region Merge Core
            if (coreBuildEnabled)
            {
                Directory.CreateDirectory("MergedCore");
                File.Delete(@"MergedCore\MergeLog.txt");
                ILMerge coreMerge = new ILMerge();

                List <string> coreAssembles = new List <string>();
                coreAssembles.Add("NetworkCommsDotNet.dll");
                coreAssembles.Add("protobuf-net.dll");
                coreAssembles.Add("ProtobufSerializer.dll");

                coreMerge.SetInputAssemblies(coreAssembles.ToArray());
                coreMerge.Version = networkCommsVersion;

                coreMerge.TargetKind = ILMerge.Kind.Dll;
                coreMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                coreMerge.XmlDocumentation = true;

                coreMerge.KeyFile = "networkcomms.net.snk";

                coreMerge.OutputFile = @"MergedCore\NetworkCommsDotNetCore.dll";

                coreMerge.Log     = true;
                coreMerge.LogFile = @"MergedCore\MergeLog.txt";

                coreMerge.Merge();
            }
            #endregion

            #region Merge Complete
            if (completeBuildEnabled)
            {
                Directory.CreateDirectory("MergedComplete");
                File.Delete(@"MergedComplete\MergeLog.txt");
                ILMerge completeMerge = new ILMerge();

                List <string> completeAssembles = new List <string>();
                completeAssembles.Add("NetworkCommsDotNet.dll");
                completeAssembles.Add("protobuf-net.dll");
                completeAssembles.Add("ProtobufSerializer.dll");

                completeMerge.SetInputAssemblies(completeAssembles.ToArray());
                completeMerge.Version = networkCommsVersion;

                completeMerge.TargetKind = ILMerge.Kind.Dll;
                completeMerge.SetTargetPlatform(targetPlatform, msCoreLibDirectory);
                completeMerge.XmlDocumentation = true;

                completeMerge.KeyFile = "networkcomms.net.snk";

                completeMerge.OutputFile = @"MergedComplete\NetworkCommsDotNetComplete.dll";

                completeMerge.Log     = true;
                completeMerge.LogFile = @"MergedComplete\MergeLog.txt";

                completeMerge.Merge();
            }
            #endregion
#endif
        }
コード例 #12
0
        private void btnMerge_Click(object sender, EventArgs e)
        {
            if (!IsValidateInput())
            {
                return;
            }

            merge.Log     = this.chkLog.Checked;
            merge.LogFile = Path.Combine(Application.StartupPath, "log.txt");
            List <string> lstInputFiles    = new List <string>();
            string        primaryInputFile = this.txtMainAsm.Text;

            lstInputFiles.Add(primaryInputFile);//The first element of the array is considered to be the primary assembly.

            foreach (ListBoxItem item in this.listBox.Items)
            {
                lstInputFiles.Add(item.FullFileName);
            }

            merge.SetInputAssemblies(lstInputFiles.ToArray());

            string   outPutfile = Path.Combine(txtOutPath.Text, txtOutFileName.Text);
            FileInfo fiPrimeray = new FileInfo(primaryInputFile);
            string   ext        = fiPrimeray.Extension;
            FileInfo fi         = new FileInfo(outPutfile);

            if (string.IsNullOrEmpty(fi.Extension))
            {
                outPutfile += ext;
                fi          = new FileInfo(outPutfile);
            }

            merge.OutputFile = outPutfile;

            string targetPlatform = "v4";

            foreach (Control ctrl in groupBox2.Controls)
            {
                RadioButton rdo = ctrl as RadioButton;
                if (rdo != null)
                {
                    targetPlatform = rdo.Text;
                    break;
                }
            }
            merge.SetTargetPlatform(targetPlatform, string.Empty);////
            merge.TargetKind = ILMerge.Kind.SameAsPrimaryAssembly;

            var    errors = 0;
            Thread t      = new Thread(() =>
            {
                this.BeginInvoke(new Action(() =>
                {
                    progressBar1.Visible = true;
                }));
                try
                {
                    merge.Merge();
                }
                catch (Exception ex)
                {
                    errors++;
                    Loghelper.BugLog(this.GetType().ToString(), ex.Message, ex.StackTrace);
                }

                this.BeginInvoke(new Action(() =>
                {
                    progressBar1.Visible = false;
                    MessageBox.Show("合并完成!" + (errors > 0 ? (" 过程中有" + errors + "处异常,请查看日志。") : ""), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }));
            });

            t.IsBackground = true;
            t.Start();
        }
コード例 #13
0
ファイル: Program.cs プロジェクト: BEllis/SpecFlow
        private static void CreateSignedParser(string gherkinParserFullPath, Version version, string keyFullPath, string outputFileFullPath)
        {
            Console.WriteLine("Generating signed parser...");

            ILMerge ilMerge = new ILMerge();
            ilMerge.KeyFile = keyFullPath;
            ilMerge.Version = version;

            string simpleJsonPath = Path.Combine(Path.GetDirectoryName(gherkinParserFullPath), "com.googlecode.json-simple-json-simple.dll");
            string base46Path = Path.Combine(Path.GetDirectoryName(gherkinParserFullPath), "net.iharder-base64.dll");

            ilMerge.SetInputAssemblies(new[] { gherkinParserFullPath, simpleJsonPath, base46Path });

            ilMerge.OutputFile = outputFileFullPath;
            ilMerge.TargetKind = ILMerge.Kind.Dll;

            ilMerge.Log = true;

            ilMerge.Merge();

            Console.WriteLine();
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: VivekRagunathan/EI
        static void Main(string[] args)
        {
            ReadConfiguration();

             ParseArguments(args);

             var providerOptions = new Dictionary<string, string>();
             providerOptions.Add("CompilerVersion", "v3.5");

             CSharpCodeProvider cp = new CSharpCodeProvider(providerOptions);
             CompilerParameters cparams = new CompilerParameters();
             cparams.GenerateExecutable = true;
             cparams.OutputAssembly = "Setup_Temp.exe";
             cparams.ReferencedAssemblies.AddRange(FrwkAssemblyRefs.Concat(ExtAssemblyRefs).ToArray());

             cparams.EmbeddedResources.Add(PackageFile);

             string libpathstr = string.Empty;
             foreach (var path in LibPaths)
             {
            libpathstr += "\"" + path + "\" ";
             }
             if (LibPaths.Length > 0)
             {
            cparams.CompilerOptions = String.Format("/lib:{0}",
               libpathstr);
             }

             // Add modules
             if (ModuleRefs.Length > 0)
             {
            StringBuilder sb = new StringBuilder();

            sb.Append("/addmodule:");
            foreach ( var mr in ModuleRefs )
            {
               sb.Append(mr + " ");
            }
            cparams.CompilerOptions += sb.ToString();
             }

             CompilerResults cr = cp.CompileAssemblyFromFile(cparams, Sources);

             cr.Errors.OfType<CompilerError>().ToList()
            .ForEach((e) => Console.WriteLine((e.IsWarning ? "Warning : " : "Error : ") + e.ErrorText));

             foreach ( CompilerError r in cr.Errors )
             {
            if (!r.IsWarning)
            {
               return;
            }
             }

             // Merge the IL to create a single assembly
             ILMerge merger = new ILMerge();

             merger.OutputFile = "Setup.exe";
             string[] primaryAssembly = new string[] { "Setup_Temp.exe" };
             string[] assemblies = primaryAssembly.Concat(ExtAssemblyRefs).ToArray();

             merger.SetInputAssemblies(assemblies);

             merger.Merge();

             File.Delete("Setup_Temp.exe");
        }
コード例 #15
0
        protected override void ExecuteTask()
        {
            ILMerge = new ILMerge();
            ILMerge.AttributeFile = m_attributeFile;
            ILMerge.Closed = m_closed;
            ILMerge.CopyAttributes = m_copyAttributes;
            ILMerge.DebugInfo = m_debugInfo;
            ILMerge.ExcludeFile = m_excludeFile;
            ILMerge.Internalize = m_internalize;
            ILMerge.LogFile = m_logFile;
            ILMerge.Log = m_log;
            ILMerge.OutputFile = m_outputFile;
            ILMerge.KeyFile = m_keyFile;

            switch (m_targetKind.ToLower())
            {
                case "winexe":
                    ILMerge.TargetKind = ILMerge.Kind.WinExe; break;
                case "exe":
                    ILMerge.TargetKind = ILMerge.Kind.Exe; break;
                case "dll":
                    ILMerge.TargetKind = ILMerge.Kind.Dll; break;
                case "sameasprimary":
                    ILMerge.TargetKind = ILMerge.Kind.SameAsPrimaryAssembly;
                    break;
                default:
                    throw new BuildException(
                        "TargetKind should be [exe|dll|winexe|sameasprimary]");
            }

            string[] assemblies = new string[m_assemblies.FileNames.Count + 1];
            if (this.m_primaryAssembly.FileNames.Count != 1)
            {
                this.Log(Level.Error, "Only one primary assembly is allowed in the <primaryassembly> fileset, but found {0}.", this.m_primaryAssembly.FileNames.Count);
                return;
            }
            assemblies[0] = this.m_primaryAssembly.FileNames[0];
            for (int i = 1; i < assemblies.Length; i++)
            {
                assemblies[i] = m_assemblies.FileNames[i-1];
            }

            ILMerge.SetInputAssemblies(assemblies);

            List<string> searchPath = new List<string>();
            searchPath.Add(".");
            if (LibraryPath != null) {
               foreach (string libpath in LibraryPath.FileNames) {
                  searchPath.Add(libpath);
               }
            }
            ILMerge.SetSearchDirectories(searchPath.ToArray());

            try
            {
                this.Log(Level.Info, "Merging {0} assembl{1} to '{2}'.", this.m_assemblies.FileNames.Count, (this.m_assemblies.FileNames.Count != 1) ? "ies" : "y", this.m_outputFile);
                ILMerge.Merge();
            }
            catch (Exception e)
            {
                throw new BuildException("Failed to merge assemblies", e);
            }
        }