Exemplo n.º 1
0
        public static AssemblyDefinition CreateMultiModuleAssemblyDefinition()
        {
            AssemblyDefinition corlib = AssemblyDefinition.ReadAssembly(typeof(object).Module.FullyQualifiedName);

            AssemblyDefinition assemblyDefinition = AssemblyDefinitionObjectMother.CreateAssemblyDefinition("TestAssembly");

            assemblyDefinition.MainModule.AssemblyReferences.Add(corlib.Name);
            assemblyDefinition.Name.Version = new Version("1.0.0.0");

            ModuleDefinition secondModule        = ModuleDefinition.CreateModule("TestSecondModule.netmodule", ModuleKind.NetModule);
            TypeReference    typereference       = secondModule.Import(typeof(void));
            TypeReference    typereferenceObject = secondModule.Import(typeof(object));


            TypeDefinition   type   = new TypeDefinition("TestSpace", "TestType", TypeAttributes.Public | TypeAttributes.Class, assemblyDefinition.MainModule.Import(typeof(object)));
            MethodDefinition method = new MethodDefinition("TestMethod", MethodAttributes.Public | MethodAttributes.HideBySig, typereference);
            var il = method.Body.GetILProcessor();

            il.Emit(OpCodes.Ret);

            type.Methods.Add(method);
            method.DeclaringType = type;
            assemblyDefinition.MainModule.Types.Add(type);


            TypeDefinition   secondType   = new TypeDefinition("TestSpace", "TestSecondType", TypeAttributes.Public | TypeAttributes.Class, secondModule.Import(typeof(object)));
            MethodDefinition secondMethod = new MethodDefinition("TestSecondMethod", MethodAttributes.Public | MethodAttributes.HideBySig, typereference);

            il = secondMethod.Body.GetILProcessor();
            il.Emit(OpCodes.Ret);

            secondType.Methods.Add(secondMethod);
            secondModule.Types.Add(secondType);
            secondMethod.DeclaringType = secondType;
            assemblyDefinition.Modules.Add(secondModule);
            assemblyDefinition.MainModule.ModuleReferences.Add(secondModule);

            ExportedType e = new ExportedType("TestSpace", "TestSecondType", secondModule, secondModule);

            assemblyDefinition.MainModule.ExportedTypes.Add(e);

            var testingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"temp\testing");

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

            assemblyDefinition.Write(Path.Combine(testingDirectory, "test.mainmodule"));
            secondModule.Write(Path.Combine(testingDirectory, "test.module"));
            assemblyDefinition = AssemblyDefinition.ReadAssembly(Path.Combine(testingDirectory, "test.mainmodule"));

            return(assemblyDefinition);
        }
Exemplo n.º 2
0
        public void BuildReflectionAssemblyQualifiedName_WithNestedTypeAndWrongNamespace()
        {
            var assm   = AssemblyDefinitionObjectMother.CreateMultiModuleAssemblyDefinition();
            var nested = new TypeDefinition("<IEnumerable.CompilerGenerated", "GetEnumerator>d__b", TypeAttributes.NestedPrivate);

            assm.MainModule.Types[1].NestedTypes.Add(nested);

            var result = assm.Name.BuildReflectionAssemblyQualifiedName(assm.MainModule.Types[1].NestedTypes[0]);

            Console.WriteLine(result);
            Assert.That(result == "TestSpace.TestType+<IEnumerable.CompilerGenerated.GetEnumerator>d__b, TestAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
        }