Ejemplo n.º 1
0
        public void Can_sign_using_keycontainer()
        {
            var keyContainerName = Guid.NewGuid().ToString();

            CspContainerUtils.ImportBlob(true, keyContainerName, KeyNumber.Signature, File.ReadAllBytes(TestFiles.TestSnk));
            try
            {
                using (var outputFile = TempFile.WithExtension(".dll"))
                {
                    var ilMerge = new ILMerge
                    {
                        KeyContainer = keyContainerName,
                        OutputFile   = outputFile
                    };
                    ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());
                    ilMerge.Merge();

                    Assert.That(
                        AssemblyName.GetAssemblyName(outputFile).GetPublicKey(),
                        Is.EqualTo(new StrongNameKeyPair(File.ReadAllBytes(TestFiles.TestSnk)).PublicKey));
                }
            }
            finally
            {
                CspContainerUtils.Delete(true, keyContainerName, KeyNumber.Signature);
            }
        }
Ejemplo n.º 2
0
        public void Single_input()
        {
            var ilMerge = new ILMerge();

            ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());
            ilMerge.MergeToTempFileForTest(".dll");
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
 public void Setup()
 {
     task          = new ILMerge();
     task.ToolPath = Path.Combine(TaskUtility.GetProjectRootDirectory(true),
                                  @"Source\packages\ilmerge.2.12.0803\");
     task.BuildEngine     = new MockBuild();
     task.InputAssemblies = this.inputAssemblies;
 }
Ejemplo n.º 5
0
 public static void MergeToTempFileForTest(this ILMerge ilMerge, string outputExtension)
 {
     using (var outputFile = TempFile.WithExtension(outputExtension))
     {
         ilMerge.OutputFile = outputFile;
         ilMerge.Merge();
     }
 }
Ejemplo n.º 6
0
        /// <summary>The created assembly has the same 'kind' as the primary assembly.</summary>
        /// <param name="assemblyFileNames">The first assembly is the primary assembly.</param>
        public static void MergeAssemblies(String outputFileName, params String[] assemblyFileNames)
        {
            ILMerge merge = new ILMerge();

            merge.OutputFile = outputFileName;
            merge.TargetKind = ILMerge.Kind.SameAsPrimaryAssembly;
            merge.SetInputAssemblies(assemblyFileNames);

            merge.Merge();
        }
        public void LinkExecutable()
        {
            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.Exe;
            merger.Merge();
        }
Ejemplo n.º 8
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();
        }
Ejemplo n.º 9
0
	  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();
		}
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        public void DuplicateTypeCollision()
        {
            if (!this.isILMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();
            task.BuildEngine = new MockBuild();

            task.InputAssemblies = this.inputAssemblies;
            task.OutputFile = new TaskItem(Path.Combine(this.testDirectory, @"merged.dll"));

            Assert.IsFalse(task.Execute(), @"Task succeeded dispite of duplicate type names");
        }
Ejemplo n.º 12
0
        public void Can_sign_using_keyfile()
        {
            using (var outputFile = TempFile.WithExtension(".dll"))
            {
                var ilMerge = new ILMerge {
                    KeyFile = TestFiles.TestSnk, OutputFile = outputFile
                };
                ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());
                ilMerge.Merge();

                Assert.That(
                    AssemblyName.GetAssemblyName(outputFile).GetPublicKey(),
                    Is.EqualTo(new StrongNameKeyPair(File.ReadAllBytes(TestFiles.TestSnk)).PublicKey));
            }
        }
Ejemplo n.º 13
0
        public void DuplicateTypeCollision()
        {
            if (!ilMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();

            task.BuildEngine = new MockBuild();

            task.InputAssemblies = inputAssemblies;
            task.OutputFile      = new TaskItem(Path.Combine(testDirectory, @"merged.dll"));

            Assert.IsFalse(task.Execute(), @"Task succeeded dispite of duplicate type names");
        }
Ejemplo n.º 14
0
        public void Sign_with_keyfile_should_not_throw_error()
        {
            using (var outputFile = TempFile.WithExtension(".dll"))
                using (var logFile = TempFile.WithExtension(".log"))
                {
                    var ilMerge = new ILMerge {
                        KeyFile = TestFiles.TestSnk, OutputFile = outputFile, LogFile = logFile
                    };
                    ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());
                    ilMerge.Merge();

                    var errorLines = File.ReadLines(logFile).Where(line =>
                                                                   line.StartsWith("ILMerge error:", StringComparison.OrdinalIgnoreCase));

                    Assert.That(errorLines, Is.Empty);
                }
        }
Ejemplo n.º 15
0
        public void DuplicateTypeAllowed()
        {
            if (!this.isILMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();
            task.BuildEngine = new MockBuild();

            task.InputAssemblies = this.inputAssemblies;
            task.OutputFile = new TaskItem(Path.Combine(this.testDirectory, @"merged1.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB", "ClassBA");
            task.XmlDocumentation = true;

            Assert.IsTrue(task.Execute(), @"Task failed");
            this.AssertResults(task, PublicCount, VersionA);
        }
Ejemplo n.º 16
0
        public void DuplicateTypeAllowed()
        {
            if (!ilMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();

            task.BuildEngine = new MockBuild();

            task.InputAssemblies     = inputAssemblies;
            task.OutputFile          = new TaskItem(Path.Combine(testDirectory, @"merged1.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB");
            task.XmlDocumentation    = true;

            Assert.IsTrue(task.Execute(), @"Task failed");
            AssertResults(task, PUBLIC_COUNT, VERSION_A);
        }
Ejemplo n.º 17
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);
                }
            }
        }
        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);
                }
            }
        }
Ejemplo n.º 19
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();
        }
Ejemplo n.º 20
0
        public void Can_sign_using_keyfile()
        {
            // ARRANGE
            var outputFile = Path.Combine(TestContext.DeploymentDirectory,
                                          Path.ChangeExtension(Path.GetRandomFileName(), Extension));

            var ilMerge = new ILMerge {
                KeyFile = "test.snk", OutputFile = outputFile
            };

            ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());

            // ACT
            ilMerge.Merge();

            // ASSERT
            var expectedKeyBytes   = new StrongNameKeyPair(File.ReadAllBytes(TestSnk)).PublicKey;
            var outputFileKeyBytes = AssemblyName.GetAssemblyName(outputFile).GetPublicKey();

            CollectionAssert.AreEqual(expectedKeyBytes, outputFileKeyBytes, "Expected PublicKey bytes do not match-up to the generated assembly PublicKey bytes");
        }
Ejemplo n.º 21
0
        public void Bad_keyfile_gives_diagnostic_warning()
        {
            using (var logFile = new TempFile())
                using (var outputFile = TempFile.WithExtension(".dll"))
                {
                    var ilMerge = new ILMerge
                    {
                        KeyFile    = TestFiles.TestPfx,
                        OutputFile = outputFile,
                        LogFile    = logFile
                    };
                    ilMerge.SetUpInputAssemblyForTest(Assembly.GetExecutingAssembly());

                    ilMerge.Merge();

                    var logText = File.ReadAllText(logFile);
                    Assert.That(logText, Contains.Substring("Unable to obtain public key for StrongNameKeyPair."));
                    Assert.That(logText, Contains.Substring("PFX"));
                    Assert.That(logText, Contains.Substring("key container"));
                }
        }
Ejemplo n.º 22
0
        public void SignedMergedAssembly()
        {
            if (!this.isILMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();

            task.BuildEngine = new MockBuild();

            task.InputAssemblies     = this.inputAssemblies;
            task.OutputFile          = new TaskItem(Path.Combine(this.testDirectory, @"merged4.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB");
            task.DebugInfo           = false;
            task.XmlDocumentation    = false;
            task.KeyFile             = new TaskItem(this.keyFile);

            Assert.IsTrue(task.Execute(), @"Task failed");
            this.AssertResults(task, PublicCount, VersionA);
        }
Ejemplo n.º 23
0
        private void AssertResults(ILMerge task, int publicTypeCount, string version)
        {
            MessageImportance imp = MessageImportance.Low;

            Assert.IsTrue(File.Exists(task.OutputFile.ItemSpec), @"No merged assembly");
            string pdbFile = Path.ChangeExtension(task.OutputFile.ItemSpec, "pdb");

            Assert.AreEqual(task.DebugInfo, File.Exists(pdbFile), @"No debug file");
            string xmlFile = Path.ChangeExtension(task.OutputFile.ItemSpec, @"xml");

            Assert.AreEqual(task.XmlDocumentation, File.Exists(xmlFile), @"No xml documentation file");

            Assembly merge = Assembly.LoadFile(task.OutputFile.ItemSpec);

            task.Log.LogMessage(imp, "Merged assembly: {0}", merge.FullName);

            Type[] types = merge.GetExportedTypes();
            foreach (Type type in types)
            {
                task.Log.LogMessage(imp, "Type: {0}", type.Name);
                task.Log.LogMessage(imp, " Attributes: {0}", type.Attributes.ToString());
            }

            Assert.AreEqual(publicTypeCount, types.Length, @"Wrong number of public types");

            AssemblyName assName = new AssemblyName(merge.FullName);

            task.Log.LogMessage(imp, "Version: {0}", assName.Version.ToString());
            Assert.AreEqual(version, assName.Version.ToString(), @"Wrong version");

            byte[] publicKeyToken = assName.GetPublicKeyToken();
            if (task.KeyFile == null)
            {
                Assert.AreEqual(0, publicKeyToken.Length, @"Merged assembly expected to be unsigned");
            }
            else
            {
                Assert.AreNotEqual(0, publicKeyToken, @"Merged assembly expected to be signed");
            }
        }
Ejemplo n.º 24
0
        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();
        }
Ejemplo n.º 25
0
        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();
        }
Ejemplo n.º 26
0
        public void VersionedMergedAssembly()
        {
            if (!ilMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();

            task.BuildEngine = new MockBuild();

            task.InputAssemblies     = inputAssemblies;
            task.OutputFile          = new TaskItem(Path.Combine(testDirectory, @"merged5.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB");
            task.DebugInfo           = false;
            task.XmlDocumentation    = false;
            task.KeyFile             = new TaskItem(keyFile);
            string version = @"5.6.7.8";

            task.Version = version;

            Assert.IsTrue(task.Execute(), @"Task failed");
            AssertResults(task, PUBLIC_COUNT, version);
        }
Ejemplo n.º 27
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();
        }
Ejemplo n.º 28
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.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);
        }
Ejemplo n.º 29
0
 public void ILMerge(Action<IILMerge> args)
 {
     var implementation = new ILMerge();
     args(implementation);
     implementation.InternalExecute();
 }
Ejemplo n.º 30
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");

                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
        }
Ejemplo n.º 31
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);
            }
        }
Ejemplo n.º 32
0
        public void VersionedMergedAssembly()
        {
            if (!this.isILMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();
            task.BuildEngine = new MockBuild();

            task.InputAssemblies = this.inputAssemblies;
            task.OutputFile = new TaskItem(Path.Combine(this.testDirectory, @"merged5.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB");
            task.DebugInfo = false;
            task.XmlDocumentation = false;
            task.KeyFile = new TaskItem(this.keyFile);
            string version = @"5.6.7.8";
            task.Version = version;

            Assert.IsTrue(task.Execute(), @"Task failed");
            this.AssertResults(task, PublicCount, version);
        }
Ejemplo n.º 33
0
 public void Setup()
 {
     _fileSystemHelper = MockRepository.GenerateMock<IFileSystemHelper>();
     _subject = new ILMerge(_fileSystemHelper);
 }
Ejemplo n.º 34
0
 public MainForm()
 {
     InitializeComponent();
     merge = new ILMerge();
 }
Ejemplo n.º 35
0
        static void DoMerge(string outputFile, string[] dlls,
                            ILMerge.Kind targetType = ILMerge.Kind.SameAsPrimaryAssembly,
                            string logFile          = null, bool getXml         = false, bool getPDB = false,
                            string version          = null, string[] searchDirs = null)
        {
            if (string.IsNullOrEmpty(outputFile))
            {
                throw new ArgumentException("未提供输出文件名outputFile");
            }

            if (dlls == null || dlls.Length == 0)
            {
                throw new ArgumentException("未提供输入文件dlls");
            }

            ILMerge merge = new ILMerge();

            // 是否允许同名的public class,如果允许,把这些类型添加进去,比如需要合并有混淆的dll时(那些类被变成a、b、c之类了)
            // 如果AllowDuplicateType的参数设置为null,表示允许所有的同名类(用重命名的方法)
            // 默认不允许,如果有同名的public class会抛出异常
            //merge.AllowDuplicateType("");
            // 注:AllowDuplicateType不允许跟UnionMerge属性同时使用

            // 默认值false
            merge.AllowWildCards = false;// 是否允许文件名里包含通配符,注:.. 这样的2个点 设置为true也不允许

            //merge.Closed = true;
            //merge.AllowZeroPeKind = true;


            // 默认值true
            merge.DebugInfo = getPDB;    // 是否要创建一个pdb调试文件

            if (!string.IsNullOrEmpty(logFile))
            {
                // 默认值false
                merge.Log     = true;    // 是否输出日志
                merge.LogFile = logFile; // 如果为null,日志输出到控制台,否则输出到这个文件里
            }

            // 必须设置
            merge.OutputFile = outputFile; // 输出的文件路径+文件名

            // 设置要合并的dll列表,第一个文件是主文件
            //string[] dlls = new string[] { };
            merge.SetInputAssemblies(dlls);

            // 如果dll列表没有设置全路径,那么会在dllDirs这些目录下查找
            if (searchDirs != null && searchDirs.Length > 0)
            {
                string[] dllDirs = searchDirs;
                merge.SetSearchDirectories(dllDirs);
            }

            // 设置.net framework的版本,第一个参数只能是"v1", "v1.1", "v2", "v4"
            // 第二个参数是mscorlib.dll所在目录
            //merge.SetTargetPlatform("", "");

            // 默认跟主文件一致
            merge.TargetKind = targetType;    // 输出类型:Dll, Exe, WinExe

            // 如果设置为true,则所有同名的类型下的所有成员,会合并到一个类型下
            // 默认值false
            // merge.UnionMerge = true;
            // 注:AllowDuplicateType不允许跟UnionMerge属性同时使用

            // 默认值null 设置目标文件的版本号
            if (!string.IsNullOrEmpty(version))
            {
                merge.Version = new Version(version);
            }
            // 默认值false 是否合并出一个xml文档
            merge.XmlDocumentation = getXml;

            merge.Merge();
        }
Ejemplo n.º 36
0
	    public void Setup()
        {
	        task = new ILMerge();
	        task.ToolPath = Path.Combine(TaskUtility.GetProjectRootDirectory(true),
                                         @"Source\packages\ilmerge.2.12.0803\");
            task.BuildEngine = new MockBuild();
            task.InputAssemblies = this.inputAssemblies;
	    }
Ejemplo n.º 37
0
        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();
        }
Ejemplo n.º 38
0
 public static void SetUpInputAssemblyForTest(this ILMerge ilMerge, Assembly inputAssembly)
 {
     ilMerge.SetSearchDirectories(ShadowCopyUtils.GetTransitiveClosureDirectories(inputAssembly).ToArray());
     ilMerge.SetInputAssemblies(new[] { inputAssembly.Location });
 }
Ejemplo n.º 39
0
		private void AssertResults(ILMerge task, int publicTypeCount, string version)
		{
			MessageImportance imp = MessageImportance.Low;

			Assert.IsTrue(File.Exists(task.OutputFile.ItemSpec), @"No merged assembly");
			string pdbFile = Path.ChangeExtension(task.OutputFile.ItemSpec, "pdb");
			Assert.AreEqual(task.DebugInfo, File.Exists(pdbFile), @"No debug file");
			string xmlFile = Path.ChangeExtension(task.OutputFile.ItemSpec, @"xml");
			Assert.AreEqual(task.XmlDocumentation, File.Exists(xmlFile), @"No xml documentation file");

			Assembly merge = Assembly.LoadFile(task.OutputFile.ItemSpec);
			task.Log.LogMessage(imp, "Merged assembly: {0}", merge.FullName);

			Type[] types = merge.GetExportedTypes();
			foreach (Type type in types)
			{
				task.Log.LogMessage(imp, "Type: {0}", type.Name);
				task.Log.LogMessage(imp, " Attributes: {0}", type.Attributes.ToString());
			}

			Assert.AreEqual(publicTypeCount, types.Length, @"Wrong number of public types");

			AssemblyName assName = new AssemblyName(merge.FullName);
			task.Log.LogMessage(imp, "Version: {0}", assName.Version.ToString());
			Assert.AreEqual(version, assName.Version.ToString(), @"Wrong version");

			byte[] publicKeyToken = assName.GetPublicKeyToken();
			if (task.KeyFile == null)
			{
				Assert.AreEqual(0, publicKeyToken.Length, @"Merged assembly expected to be unsigned");
			}
			else
			{
				Assert.AreNotEqual(0, publicKeyToken, @"Merged assembly expected to be signed");
			}
		}
Ejemplo n.º 40
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);
            }
        }
Ejemplo n.º 41
0
        public void FixtureInit()
        {
            this.isILMergeAvailable = File.Exists(Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
                @"Microsoft\ILMerge\ILMerge.exe"));

            MockBuild buildEngine = new MockBuild();

            this.testDirectory = TaskUtility.makeTestDirectory(buildEngine);

            ILMerge task = new ILMerge();
            task.BuildEngine = buildEngine;

            if (TaskUtility.CalledInBuildDirectory)
            {
                this.assemblyA = Path.Combine(this.testDirectory, @"A.dll");
                this.assemblyB = Path.Combine(this.testDirectory, @"B.dll");
                this.excludeFile = Path.Combine(this.testDirectory, @"ExcludeTypes.txt");
                this.keyFile = Path.Combine(this.testDirectory, @"keypair.snk");
            }
            else
            {
                string config = TaskUtility.BuildConfiguration;
                string assDir = Path.GetFullPath(TaskUtility.AssemblyDirectory);
                this.assemblyA = Path.GetFullPath(Path.Combine(assDir, @"..\..\ILMerge\A\bin\" + config + @"\A.dll"));
                this.assemblyB = Path.GetFullPath(Path.Combine(assDir, @"..\..\ILMerge\B\bin\" + config + @"\B.dll"));
                this.excludeFile = Path.Combine(assDir, @"ILMerge\ExcludeTypes.txt");
                this.keyFile = Path.Combine(assDir, @"ILMerge\keypair.snk");
            }

            this.inputAssemblies = TaskUtility.StringArrayToItemArray(this.assemblyA, this.assemblyB);
        }
Ejemplo n.º 42
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.Corlib;
            bool isNet40  = corlib.Version.Major == 4;

            var assemblyReferences = new List <AssemblyDefinition>();
            var paths = new List <string>();

            paths.Add(assembly.MainModule.FullyQualifiedName);

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

            // Load SharpDX assemblies
            foreach (var assemblyRef in assembly.MainModule.AssemblyReferences)
            {
                bool isAssemblyAdded = false;

                foreach (var regexIncludeStr in includeMergeListRegex)
                {
                    var regexInclude = new Regex(regexIncludeStr);
                    if (regexInclude.Match(assemblyRef.Name).Success)
                    {
                        var assemblyDefRef = assembly.MainModule.AssemblyResolver.Resolve(assemblyRef);
                        assemblyReferences.Add(assemblyDefRef);
                        paths.Add(assemblyDefRef.MainModule.FullyQualifiedName);
                        isAssemblyAdded = true;
                        break;
                    }
                }

                if (!isAssemblyAdded && AutoReferences)
                {
                    var assemblyDefRef      = assembly.MainModule.AssemblyResolver.Resolve(assemblyRef);
                    var directoryOfAssembly = Path.GetDirectoryName(assemblyDefRef.MainModule.FullyQualifiedName);
                    if (fromDirectory == directoryOfAssembly)
                    {
                        paths.Add(assemblyDefRef.MainModule.FullyQualifiedName);
                    }
                }
            }

            // 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.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);
        }
Ejemplo n.º 43
0
        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");
        }
Ejemplo n.º 44
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
        }
Ejemplo n.º 45
0
        public void PrimaryTypesAndExclusions()
        {
            if (!this.isILMergeAvailable)
            {
                Assert.Ignore(@"ILMerge.exe not available");
            }

            ILMerge task = new ILMerge();
            task.BuildEngine = new MockBuild();

            task.InputAssemblies = this.inputAssemblies;
            task.OutputFile = new TaskItem(Path.Combine(this.testDirectory, @"merged3.dll"));
            task.AllowDuplicateTypes = TaskUtility.StringArrayToItemArray(@"ClassAB");
            task.DebugInfo = false;
            task.XmlDocumentation = false;
            task.ExcludeFile = new TaskItem(this.excludeFile);

            Assert.IsTrue(task.Execute(), @"Task failed");
            this.AssertResults(task, PublicACount + 1, VersionA);
        }