2 // AssemblyBuilderTest.cs - NUnit Test Cases for the AssemblyBuilder class
4 // Zoltan Varga (vargaz@freemail.hu)
6 // (C) Ximian, Inc. http://www.ximian.com
12 using System.Globalization;
13 using System.Threading;
14 using System.Reflection;
15 using System.Reflection.Emit;
17 using System.Configuration.Assemblies;
19 using NUnit.Framework;
21 namespace MonoTests.System.Reflection.Emit
25 public class AssemblyBuilderTest
27 [AttributeUsage (AttributeTargets.Assembly)]
28 public sealed class FooAttribute : Attribute
30 public FooAttribute (string arg)
34 public FooAttribute ()
39 static int nameIndex = 0;
40 static AppDomain domain;
41 static AssemblyBuilder ab;
42 static ModuleBuilder mb;
43 string tempDir = Path.Combine (Path.GetTempPath (), typeof (AssemblyBuilderTest).FullName);
46 protected void SetUp ()
48 if (Directory.Exists (tempDir))
49 Directory.Delete (tempDir, true);
51 Directory.CreateDirectory (tempDir);
53 for (int i = 1; i < 3; ++i) {
54 string resFile = Path.Combine (tempDir, "res" + i + ".txt");
55 using (StreamWriter sw = new StreamWriter (resFile)) {
60 domain = Thread.GetDomain ();
62 mb = ab.DefineDynamicModule ("def_module");
66 protected void TearDown ()
68 if (Directory.Exists (tempDir))
69 Directory.Delete (tempDir, true);
72 private AssemblyName genAssemblyName ()
74 AssemblyName assemblyName = new AssemblyName();
75 assemblyName.Name = typeof (AssemblyBuilderTest).FullName + (nameIndex ++);
79 private AssemblyBuilder genAssembly ()
81 return domain.DefineDynamicAssembly (genAssemblyName (),
82 AssemblyBuilderAccess.RunAndSave,
86 private MethodInfo genEntryFunction (AssemblyBuilder assembly)
88 ModuleBuilder module = assembly.DefineDynamicModule("module1");
89 TypeBuilder tb = module.DefineType ("A");
90 MethodBuilder mb = tb.DefineMethod ("A",
91 MethodAttributes.Static, typeof (void), new Type [0]);
92 mb.GetILGenerator ().Emit (OpCodes.Ret);
98 [Category ("NotWorking")]
99 public void ManifestModule ()
101 AssemblyName aname = new AssemblyName ("ManifestModule1");
102 ab = domain.DefineDynamicAssembly (aname, AssemblyBuilderAccess.RunAndSave,
104 Assert.IsNotNull (ab.ManifestModule, "#A1");
105 Assert.AreEqual (1, ab.GetModules ().Length, "#A2");
106 Assert.AreEqual (typeof (ModuleBuilder), ab.ManifestModule.GetType (), "#A3");
108 ModuleBuilder mb1 = (ModuleBuilder) ab.ManifestModule;
109 Assert.AreSame (mb1, ab.GetModules () [0], "#B1");
110 Assert.IsFalse (mb1.IsResource (), "#B2");
111 Assert.AreSame (mb1, ab.ManifestModule, "#B3");
113 ab.Save ("ManifestModule.dll");
115 ModuleBuilder mb2 = (ModuleBuilder) ab.ManifestModule;
116 Assert.AreSame (mb2, ab.GetModules () [0], "#C1");
117 Assert.IsFalse (mb2.IsResource (), "#C2");
118 Assert.AreSame (mb2, ab.ManifestModule, "#C3");
119 Assert.AreSame (mb1, mb2, "#C4");
124 [ExpectedException (typeof (NotSupportedException))]
125 public void TestCodeBase ()
127 string codebase = ab.CodeBase;
131 [ExpectedException (typeof (NotSupportedException))]
132 public void TestLocation ()
134 string location = ab.Location;
138 public void TestEntryPoint ()
140 Assert.AreEqual (null, ab.EntryPoint, "EntryPoint defaults to null");
142 MethodInfo mi = genEntryFunction (ab);
143 ab.SetEntryPoint (mi);
145 Assert.AreEqual (mi, ab.EntryPoint, "EntryPoint works");
149 public void TestSetEntryPoint ()
151 // Check invalid arguments
153 ab.SetEntryPoint (null);
155 } catch (ArgumentNullException ex) {
156 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
157 Assert.IsNull (ex.InnerException, "#A3");
158 Assert.IsNotNull (ex.Message, "#A4");
159 Assert.IsNotNull (ex.ParamName, "#A5");
160 Assert.AreEqual ("entryMethod", ex.ParamName, "#A6");
163 // Check method from other assembly
165 ab.SetEntryPoint (typeof (AssemblyBuilderTest).GetMethod ("TestSetEntryPoint"));
167 } catch (InvalidOperationException) {
172 public void TestIsDefined ()
174 CustomAttributeBuilder cab = new CustomAttributeBuilder (typeof (FooAttribute).GetConstructor (new Type [1] {typeof (string)}), new object [1] { "A" });
175 ab.SetCustomAttribute (cab);
177 Assert.IsTrue (ab.IsDefined (typeof (FooAttribute), false),
178 "IsDefined(FooAttribute) works");
179 Assert.IsFalse (ab.IsDefined (typeof (AssemblyVersionAttribute), false),
180 "!IsDefined(AssemblyVersionAttribute) works");
184 [ExpectedException (typeof (NotSupportedException))]
185 public void TestGetManifestResourceNames ()
187 ab.GetManifestResourceNames ();
191 [ExpectedException (typeof (NotSupportedException))]
192 public void TestGetManifestResourceInfo ()
194 ab.GetManifestResourceInfo ("foo");
198 [ExpectedException (typeof (NotSupportedException))]
199 public void TestGetManifestResourceStream1 ()
201 ab.GetManifestResourceStream ("foo");
205 [ExpectedException (typeof (NotSupportedException))]
206 public void TestGetManifestResourceStream2 ()
208 ab.GetManifestResourceStream (typeof (int), "foo");
212 [ExpectedException (typeof (NotSupportedException))]
213 public void TestGetFiles1 ()
219 [ExpectedException (typeof (NotSupportedException))]
220 public void TestGetFiles2 ()
226 [ExpectedException (typeof (NotSupportedException))]
227 public void TestGetFile ()
233 [ExpectedException (typeof (NotSupportedException))]
234 public void TestGetExportedTypes ()
236 ab.GetExportedTypes ();
240 public void TestGetDynamicModule_Name_Null ()
243 ab.GetDynamicModule (null);
245 } catch (ArgumentNullException ex) {
246 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
247 Assert.IsNull (ex.InnerException, "#3");
248 Assert.IsNotNull (ex.Message, "#4");
249 Assert.IsNotNull (ex.ParamName, "#5");
250 Assert.AreEqual ("name", ex.ParamName, "#6");
255 public void TestGetDynamicModule_Name_Empty ()
258 ab.GetDynamicModule (string.Empty);
260 } catch (ArgumentException ex) {
261 // Empty name is not legal
262 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
263 Assert.IsNull (ex.InnerException, "#3");
264 Assert.IsNotNull (ex.Message, "#4");
265 Assert.IsNotNull (ex.ParamName, "#5");
266 Assert.AreEqual ("name", ex.ParamName, "#6");
271 public void TestGetDynamicModule3 ()
273 Assert.IsNull (ab.GetDynamicModule ("FOO2"));
274 ModuleBuilder mb = ab.DefineDynamicModule ("FOO");
275 Assert.AreEqual (mb, ab.GetDynamicModule ("FOO"));
276 Assert.IsNull (ab.GetDynamicModule ("FOO4"));
281 public void TestImageRuntimeVersion ()
283 string version = ab.ImageRuntimeVersion;
284 Assert.IsTrue (version.Length > 0);
289 public void TestAddResourceFile_Name_Null ()
292 ab.AddResourceFile (null, "foo.txt");
294 } catch (ArgumentNullException ex) {
295 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
296 Assert.IsNull (ex.InnerException, "#3");
297 Assert.IsNotNull (ex.Message, "#4");
298 Assert.IsNotNull (ex.ParamName, "#5");
299 Assert.AreEqual ("name", ex.ParamName, "#6");
304 public void TestAddResourceFile_Filename_Null ()
307 ab.AddResourceFile ("foo", null);
309 } catch (ArgumentNullException ex) {
310 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
311 Assert.IsNull (ex.InnerException, "#3");
312 Assert.IsNotNull (ex.Message, "#4");
313 Assert.IsNotNull (ex.ParamName, "#5");
314 Assert.AreEqual ("fileName", ex.ParamName, "#6");
319 public void TestAddResourceFile_Name_Empty ()
322 ab.AddResourceFile (string.Empty, "foo.txt");
324 } catch (ArgumentException ex) {
325 // Empty name is not legal
326 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
327 Assert.IsNull (ex.InnerException, "#3");
328 Assert.IsNotNull (ex.Message, "#4");
333 public void TestAddResourceFile_Filename_Empty ()
336 ab.AddResourceFile ("foo", string.Empty);
338 } catch (ArgumentException ex) {
339 // Empty file name is not legal
340 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
341 Assert.IsNull (ex.InnerException, "#3");
342 Assert.IsNotNull (ex.Message, "#4");
347 [ExpectedException (typeof (FileNotFoundException))]
348 public void TestAddResourceFile_FileName_DoesNotExist ()
350 ab.AddResourceFile ("foo", "not-existent.txt");
354 public void TestAddResourceFile_FileName_Duplicate ()
356 ab.AddResourceFile ("foo", "res1.txt");
358 ab.AddResourceFile ("foo2", "res1.txt");
360 } catch (ArgumentException ex) {
361 // Duplicate file names
362 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
363 Assert.IsNull (ex.InnerException, "#3");
364 Assert.IsNotNull (ex.Message, "#4");
365 Assert.IsNull (ex.ParamName, "#5");
370 public void TestAddResourceFile_Name_Duplicate ()
372 ab.AddResourceFile ("foo", "res1.txt");
374 ab.AddResourceFile ("foo", "res2.txt");
376 } catch (ArgumentException ex) {
377 // Duplicate resource name within an assembly
378 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
379 Assert.IsNull (ex.InnerException, "#3");
380 Assert.IsNotNull (ex.Message, "#4");
381 Assert.IsNull (ex.ParamName, "#5");
386 public void TestAddResourceFile_Filename_IncludesPath ()
389 ab.AddResourceFile ("foo", "/tmp/res1.txt");
391 } catch (ArgumentException ex) {
392 // The filename must not include a path specification
393 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
394 Assert.IsNull (ex.InnerException, "#3");
395 Assert.IsNotNull (ex.Message, "#4");
396 Assert.IsNotNull (ex.ParamName, "#5");
397 Assert.AreEqual ("fileName", ex.ParamName, "#6");
402 public void TestAddResourceFile ()
404 ab.AddResourceFile ("foo", "res2.txt", ResourceAttributes.Public);
405 ab.Save ("TestAddResourceFile.dll");
407 // TODO: Test reading back
411 public void TestDefineResource ()
413 ab.DefineResource ("foo", "FOO", "foo.txt", ResourceAttributes.Public);
414 ab.DefineResource ("foo2", "FOO", "foo2.txt");
415 ab.Save ("TestDefineResource.dll");
419 public void TestDefineDynamicModule_Name_Null ()
422 ab.DefineDynamicModule (null, "foo.txt");
424 } catch (ArgumentNullException ex) {
425 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
426 Assert.IsNull (ex.InnerException, "#3");
427 Assert.IsNotNull (ex.Message, "#4");
428 Assert.IsNotNull (ex.ParamName, "#5");
429 Assert.AreEqual ("name", ex.ParamName, "#6");
434 public void TestDefineDynamicModule_FileName_Null ()
437 ab.DefineDynamicModule ("foo", null);
439 } catch (ArgumentNullException ex) {
440 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
441 Assert.IsNull (ex.InnerException, "#3");
442 Assert.IsNotNull (ex.Message, "#4");
443 Assert.IsNotNull (ex.ParamName, "#5");
444 Assert.AreEqual ("fileName", ex.ParamName, "#6");
449 public void TestDefineDynamicModule_Name_Empty ()
452 ab.DefineDynamicModule (string.Empty, "foo.txt");
454 } catch (ArgumentException ex) {
455 // Empty name is not legal
456 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
457 Assert.IsNull (ex.InnerException, "#3");
458 Assert.IsNotNull (ex.Message, "#4");
459 Assert.IsNotNull (ex.ParamName, "#5");
460 Assert.AreEqual ("name", ex.ParamName, "#6");
465 public void TestDefineDynamicModule_Filename_Empty ()
468 ab.DefineDynamicModule ("foo", string.Empty);
470 } catch (ArgumentException ex) {
471 // Empty file name is not legal
472 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
473 Assert.IsNull (ex.InnerException, "#3");
474 Assert.IsNotNull (ex.Message, "#4");
475 Assert.IsNotNull (ex.ParamName, "#5");
476 Assert.AreEqual ("fileName", ex.ParamName, "#6");
481 public void TestDefineDynamicModule_FileName_Duplicate ()
483 ab.DefineDynamicModule ("foo", "res1.txt");
485 ab.DefineDynamicModule ("foo2", "res1.txt");
487 } catch (ArgumentException ex) {
488 // Duplicate file names
489 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
490 Assert.IsNull (ex.InnerException, "#3");
491 Assert.IsNotNull (ex.Message, "#4");
492 Assert.IsNull (ex.ParamName, "#5");
497 public void TestDefineDynamicModule_Name_Duplicate ()
499 ab.DefineDynamicModule ("foo", "res1.txt");
501 ab.DefineDynamicModule ("foo", "res2.txt");
503 } catch (ArgumentException ex) {
504 // Duplicate dynamic module name within an assembly
505 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
506 Assert.IsNull (ex.InnerException, "#3");
507 Assert.IsNotNull (ex.Message, "#4");
508 Assert.IsNull (ex.ParamName, "#5");
513 public void TestDefineDynamicModule_Filename_IncludesPath ()
516 ab.DefineDynamicModule ("foo", "/tmp/res1.txt");
518 } catch (ArgumentException ex) {
519 // The filename must not include a path specification
520 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
521 Assert.IsNull (ex.InnerException, "#3");
522 Assert.IsNotNull (ex.Message, "#4");
523 Assert.IsNotNull (ex.ParamName, "#5");
524 Assert.AreEqual ("fileName", ex.ParamName, "#6");
529 public void TestDefineDynamicModule5_FileName_NoExtension ()
532 ab.DefineDynamicModule ("foo", "bar");
534 } catch (ArgumentException ex) {
535 // Module file name 'bar' must have file extension
536 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
537 Assert.IsNull (ex.InnerException, "#3");
538 Assert.IsNotNull (ex.Message, "#4");
539 Assert.IsTrue (ex.Message.IndexOf ("bar") != -1, "#5");
540 Assert.IsNull (ex.ParamName, "#6");
545 [Category ("NotWorking")]
546 public void TestDefineDynamicModule_Name_MaxLength () {
547 string name = string.Empty;
548 for (int i = 0; i < 259; ++i)
550 ab.DefineDynamicModule (name);
554 ab.DefineDynamicModule (name);
556 } catch (ArgumentException ex) {
557 // Value does not fall within expected range
558 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
559 Assert.IsNull (ex.InnerException, "#3");
560 Assert.IsNotNull (ex.Message, "#4");
561 Assert.IsNull (ex.ParamName, "#5");
566 [ExpectedException (typeof (InvalidOperationException))]
567 public void TestDefineDynamicModule_Assembly_Saved ()
569 // Called when assembly was already saved
570 ab.Save ("TestDefineDynamicModule7.dll");
571 ab.DefineDynamicModule ("foo", "foo.dll");
575 [ExpectedException (typeof (NotSupportedException))]
576 public void TestDefineDynamicModule_Access_Run ()
578 // Called on an assembly defined with the Run attribute
580 domain.DefineDynamicAssembly (genAssemblyName (),
581 AssemblyBuilderAccess.Run,
583 ab.DefineDynamicModule ("foo", "foo.dll");
587 public void TestDefineDynamicModule ()
589 ab.DefineDynamicModule ("foo", "foo.dll");
590 ab.DefineDynamicModule ("foo2", true);
591 ab.DefineDynamicModule ("foo3", "foo3.dll");
592 ab.DefineDynamicModule ("foo4", "foo4.dll", true);
595 [Test] // DefineUnmanagedResource (byte [])
596 [Category ("NotWorking")]
597 public void TestDefineUnmanagedResource1_ResourceAlreadyDefined ()
599 string version_res = Path.Combine (tempDir, "version.res");
600 using (FileStream fs = File.OpenWrite (version_res)) {
604 ab.DefineUnmanagedResource (new byte [0]);
607 ab.DefineUnmanagedResource (new byte [0]);
609 } catch (ArgumentException ex) {
610 // Native resource has already been defined
611 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
612 Assert.IsNull (ex.InnerException, "#A3");
613 Assert.IsNotNull (ex.Message, "#A4");
614 Assert.IsNull (ex.ParamName, "#A5");
618 ab.DefineUnmanagedResource (version_res);
620 } catch (ArgumentException ex) {
621 // Native resource has already been defined
622 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
623 Assert.IsNull (ex.InnerException, "#B3");
624 Assert.IsNotNull (ex.Message, "#B4");
625 Assert.IsNull (ex.ParamName, "#B5");
629 ab.DefineVersionInfoResource ();
631 } catch (ArgumentException ex) {
632 // Native resource has already been defined
633 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
634 Assert.IsNull (ex.InnerException, "#C3");
635 Assert.IsNotNull (ex.Message, "#C4");
636 Assert.IsNull (ex.ParamName, "#C5");
640 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
642 } catch (ArgumentException ex) {
643 // Native resource has already been defined
644 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
645 Assert.IsNull (ex.InnerException, "#D3");
646 Assert.IsNotNull (ex.Message, "#D4");
647 Assert.IsNull (ex.ParamName, "#D5");
651 [Test] // DefineUnmanagedResource (byte [])
652 public void TestDefineUnmanagedResource1_Resource_Null ()
655 ab.DefineUnmanagedResource ((byte []) null);
657 } catch (ArgumentNullException ex) {
658 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
659 Assert.IsNull (ex.InnerException, "#3");
660 Assert.IsNotNull (ex.Message, "#4");
661 Assert.IsNotNull (ex.ParamName, "#5");
662 Assert.AreEqual ("resource", ex.ParamName, "#6");
666 [Test] // DefineUnmanagedResource (String)
667 public void TestDefineUnmanagedResource2_ResourceAlreadyDefined ()
669 string version_res = Path.Combine (tempDir, "version.res");
670 using (FileStream fs = File.OpenWrite (version_res)) {
674 ab.DefineUnmanagedResource (version_res);
677 ab.DefineUnmanagedResource (new byte [0]);
679 } catch (ArgumentException ex) {
680 // Native resource has already been defined
681 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
682 Assert.IsNull (ex.InnerException, "#A3");
683 Assert.IsNotNull (ex.Message, "#A4");
684 Assert.IsNull (ex.ParamName, "#A5");
688 ab.DefineUnmanagedResource (version_res);
690 } catch (ArgumentException ex) {
691 // Native resource has already been defined
692 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
693 Assert.IsNull (ex.InnerException, "#B3");
694 Assert.IsNotNull (ex.Message, "#B4");
695 Assert.IsNull (ex.ParamName, "#B5");
699 ab.DefineVersionInfoResource ();
701 } catch (ArgumentException ex) {
702 // Native resource has already been defined
703 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
704 Assert.IsNull (ex.InnerException, "#C3");
705 Assert.IsNotNull (ex.Message, "#C4");
706 Assert.IsNull (ex.ParamName, "#C5");
710 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
712 } catch (ArgumentException ex) {
713 // Native resource has already been defined
714 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
715 Assert.IsNull (ex.InnerException, "#D3");
716 Assert.IsNotNull (ex.Message, "#D4");
717 Assert.IsNull (ex.ParamName, "#D5");
721 [Test] // DefinedUnmanagedResource (String)
722 [ExpectedException (typeof (FileNotFoundException))]
723 public void TestDefineUnmanagedResource2_ResourceFile_DoesNotExist ()
725 ab.DefineUnmanagedResource ("not-exists.txt");
728 [Test] // DefinedUnmanagedResource (String)
729 public void TestDefineUnmanagedResource2_ResourceFileName_Empty ()
732 ab.DefineUnmanagedResource (string.Empty);
734 } catch (ArgumentException ex) {
735 // The path is not of a legal form
736 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
737 Assert.IsNull (ex.InnerException, "#3");
738 Assert.IsNotNull (ex.Message, "#4");
739 Assert.IsNull (ex.ParamName, "#5");
743 [Test] // DefinedUnmanagedResource (String)
744 public void TestDefineUnmanagedResource2_ResourceFileName_Null ()
747 ab.DefineUnmanagedResource ((string) null);
749 } catch (ArgumentNullException ex) {
750 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
751 Assert.IsNull (ex.InnerException, "#3");
752 Assert.IsNotNull (ex.Message, "#4");
753 Assert.IsNotNull (ex.ParamName, "#5");
754 Assert.AreEqual ("resourceFileName", ex.ParamName, "#6");
758 [Test] // DefineVersionInfoResource ()
759 public void TestDefineVersionInfoResource1_Culture_NotSupported ()
761 AssemblyName aname = new AssemblyName ();
762 aname.CultureInfo = new CultureInfo ("nl-BE");
764 aname.Version = new Version (3, 5, 7);
766 AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (
767 aname, AssemblyBuilderAccess.RunAndSave,
771 Type attrType = typeof (AssemblyCultureAttribute);
772 ConstructorInfo ci = attrType.GetConstructor (new Type [] { typeof (String) });
773 CustomAttributeBuilder cab = new CustomAttributeBuilder (
774 ci, new object [1] { "doesnotexist" });
775 ab.SetCustomAttribute (cab);
777 ab.DefineVersionInfoResource ();
783 } catch (CultureNotFoundException ex) {
786 } catch (ArgumentException ex) {
787 // Culture name doesnotexist is not supported
788 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
789 Assert.IsNull (ex.InnerException, "#A3");
790 Assert.IsNotNull (ex.Message, "#A4");
791 Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#A5");
792 Assert.AreEqual ("name", ex.ParamName, "#A6");
796 ab = AppDomain.CurrentDomain.DefineDynamicAssembly (aname,
797 AssemblyBuilderAccess.RunAndSave, tempDir);
800 attrType = typeof (AssemblyCultureAttribute);
801 ci = attrType.GetConstructor (new Type [] { typeof (String) });
802 cab = new CustomAttributeBuilder (ci, new object [1] { "neutral" });
803 ab.SetCustomAttribute (cab);
805 ab.DefineVersionInfoResource ();
811 } catch (CultureNotFoundException ex) {
814 } catch (ArgumentException ex) {
815 // Culture name neutral is not supported
816 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
817 Assert.IsNull (ex.InnerException, "#B3");
818 Assert.IsNotNull (ex.Message, "#B4");
819 Assert.IsTrue (ex.Message.IndexOf ("neutral") != -1, "#B5");
820 Assert.AreEqual ("name", ex.ParamName, "#B6");
825 [Test] // DefineVersionInfoResource ()
826 public void TestDefineVersionInfoResource1_ResourceAlreadyDefined ()
828 string version_res = Path.Combine (tempDir, "version.res");
829 using (FileStream fs = File.OpenWrite (version_res)) {
833 ab.DefineVersionInfoResource ();
836 ab.DefineUnmanagedResource (new byte [0]);
838 } catch (ArgumentException ex) {
839 // Native resource has already been defined
840 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
841 Assert.IsNull (ex.InnerException, "#A3");
842 Assert.IsNotNull (ex.Message, "#A4");
843 Assert.IsNull (ex.ParamName, "#A5");
847 ab.DefineUnmanagedResource (version_res);
849 } catch (ArgumentException ex) {
850 // Native resource has already been defined
851 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
852 Assert.IsNull (ex.InnerException, "#B3");
853 Assert.IsNotNull (ex.Message, "#B4");
854 Assert.IsNull (ex.ParamName, "#B5");
858 ab.DefineVersionInfoResource ();
860 } catch (ArgumentException ex) {
861 // Native resource has already been defined
862 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
863 Assert.IsNull (ex.InnerException, "#C3");
864 Assert.IsNotNull (ex.Message, "#C4");
865 Assert.IsNull (ex.ParamName, "#C5");
869 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
871 } catch (ArgumentException ex) {
872 // Native resource has already been defined
873 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
874 Assert.IsNull (ex.InnerException, "#D3");
875 Assert.IsNotNull (ex.Message, "#D4");
876 Assert.IsNull (ex.ParamName, "#D5");
880 [Test] // DefineVersionInfoResource (String, String, String, String, String)
881 public void TestDefineVersionInfoResource2_Culture_NotSupported ()
883 AssemblyName aname = new AssemblyName ();
884 aname.CultureInfo = new CultureInfo ("nl-BE");
886 aname.Version = new Version (3, 5, 7);
888 AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (
889 aname, AssemblyBuilderAccess.RunAndSave,
893 Type attrType = typeof (AssemblyCultureAttribute);
894 ConstructorInfo ci = attrType.GetConstructor (new Type [] { typeof (String) });
895 CustomAttributeBuilder cab = new CustomAttributeBuilder (
896 ci, new object [1] { "doesnotexist" });
897 ab.SetCustomAttribute (cab);
899 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
905 } catch (CultureNotFoundException ex) {
908 } catch (ArgumentException ex) {
909 // Culture name doesnotexist is not supported
910 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
911 Assert.IsNull (ex.InnerException, "#A3");
912 Assert.IsNotNull (ex.Message, "#A4");
913 Assert.IsTrue (ex.Message.IndexOf ("doesnotexist") != -1, "#A5");
914 Assert.AreEqual ("name", ex.ParamName, "#A6");
918 ab = AppDomain.CurrentDomain.DefineDynamicAssembly (aname,
919 AssemblyBuilderAccess.RunAndSave, tempDir);
922 attrType = typeof (AssemblyCultureAttribute);
923 ci = attrType.GetConstructor (new Type [] { typeof (String) });
924 cab = new CustomAttributeBuilder (ci, new object [1] { "neutral" });
925 ab.SetCustomAttribute (cab);
927 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
933 } catch (CultureNotFoundException ex) {
936 } catch (ArgumentException ex) {
937 // Culture name neutral is not supported
938 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
939 Assert.IsNull (ex.InnerException, "#B3");
940 Assert.IsNotNull (ex.Message, "#B4");
941 Assert.IsTrue (ex.Message.IndexOf ("neutral") != -1, "#B5");
942 Assert.AreEqual ("name", ex.ParamName, "#B6");
947 [Test] // DefineVersionInfoResource (String, String, String, String, String)
948 public void TestDefineVersionInfoResource2_ResourceAlreadyDefined ()
950 string version_res = Path.Combine (tempDir, "version.res");
951 using (FileStream fs = File.OpenWrite (version_res)) {
955 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
958 ab.DefineUnmanagedResource (new byte [0]);
960 } catch (ArgumentException ex) {
961 // Native resource has already been defined
962 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
963 Assert.IsNull (ex.InnerException, "#A3");
964 Assert.IsNotNull (ex.Message, "#A4");
965 Assert.IsNull (ex.ParamName, "#A5");
969 ab.DefineUnmanagedResource (version_res);
971 } catch (ArgumentException ex) {
972 // Native resource has already been defined
973 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
974 Assert.IsNull (ex.InnerException, "#B3");
975 Assert.IsNotNull (ex.Message, "#B4");
976 Assert.IsNull (ex.ParamName, "#B5");
980 ab.DefineVersionInfoResource ();
982 } catch (ArgumentException ex) {
983 // Native resource has already been defined
984 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#C2");
985 Assert.IsNull (ex.InnerException, "#C3");
986 Assert.IsNotNull (ex.Message, "#C4");
987 Assert.IsNull (ex.ParamName, "#C5");
991 ab.DefineVersionInfoResource ("A", "1.0", "C", "D", "E");
993 } catch (ArgumentException ex) {
994 // Native resource has already been defined
995 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#D2");
996 Assert.IsNull (ex.InnerException, "#D3");
997 Assert.IsNotNull (ex.Message, "#D4");
998 Assert.IsNull (ex.ParamName, "#D5");
1003 public void TestSetCustomAttribute1_CustomBuilder_Null ()
1006 ab.SetCustomAttribute (null);
1008 } catch (ArgumentNullException ex) {
1009 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1010 Assert.IsNull (ex.InnerException, "#3");
1011 Assert.IsNotNull (ex.Message, "#4");
1012 Assert.IsNotNull (ex.ParamName, "#5");
1013 Assert.AreEqual ("customBuilder", ex.ParamName, "#6");
1018 public void TestSetCustomAttribute2_ConstructorInfo_Null ()
1021 ab.SetCustomAttribute (null, new byte [0]);
1023 } catch (ArgumentNullException ex) {
1024 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1025 Assert.IsNull (ex.InnerException, "#3");
1026 Assert.IsNotNull (ex.Message, "#4");
1027 Assert.IsNotNull (ex.ParamName, "#5");
1028 Assert.AreEqual ("con", ex.ParamName, "#6");
1033 public void TestSetCustomAttribute2_BinaryAttribute_Null ()
1036 ab.SetCustomAttribute (typeof (AssemblyCompanyAttribute).GetConstructor (
1037 new Type [] { typeof (String) }), null);
1039 } catch (ArgumentNullException ex) {
1040 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
1041 Assert.IsNull (ex.InnerException, "#3");
1042 Assert.IsNotNull (ex.Message, "#4");
1043 Assert.IsNotNull (ex.ParamName, "#5");
1044 Assert.AreEqual ("binaryAttribute", ex.ParamName, "#6");
1048 [Test] // SetCustomAttribute (CustomAttributeBuilder)
1049 public void TestSetCustomAttribute1 ()
1057 an = new AssemblyName ();
1058 an.Name = "TestSetCustomAttributeA";
1060 ab = domain.DefineDynamicAssembly (an, AssemblyBuilderAccess.Save, tempDir);
1061 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyVersionAttribute).
1062 GetConstructor (new Type [] { typeof (string) }), new object [] { "1.2.3.4"}));
1063 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyCultureAttribute).
1064 GetConstructor (new Type [] { typeof (string) }), new object [] { "bar"}));
1065 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyAlgorithmIdAttribute).
1066 GetConstructor (new Type [] { typeof (AssemblyHashAlgorithm) }),
1067 new object [] { AssemblyHashAlgorithm.MD5 }));
1068 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyFlagsAttribute).
1069 GetConstructor (new Type [] { typeof (uint) }), new object [] { (uint)0xff }));
1070 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute).
1071 GetConstructor (new Type [] { typeof (bool) }), new object [] { true }));
1072 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (FooAttribute).
1073 GetConstructor (Type.EmptyTypes), new object [0]));
1074 ab.Save ("TestSetCustomAttributeA.dll");
1076 filename = Path.Combine (tempDir, "TestSetCustomAttributeA.dll");
1077 check = AssemblyName.GetAssemblyName (filename);
1078 Assert.AreEqual (CultureInfo.InvariantCulture, check.CultureInfo, "#A1");
1080 Assert.AreEqual (AssemblyNameFlags.None, check.Flags, "#A2");
1082 Assert.AreEqual (AssemblyNameFlags.PublicKey, check.Flags, "#A2");
1084 Assert.AreEqual ("TestSetCustomAttributeA, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", check.FullName, "#A3");
1086 Assert.IsNull (check.GetPublicKey (), "#A4");
1088 Assert.AreEqual (new byte [0], check.GetPublicKey (), "#A4");
1091 Assert.AreEqual (new byte [0], check.GetPublicKeyToken (), "#A5");
1093 Assert.IsNull (check.GetPublicKeyToken (), "#A5");
1095 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, check.HashAlgorithm, "#A6");
1096 Assert.IsNull (check.KeyPair, "#A7");
1097 Assert.AreEqual ("TestSetCustomAttributeA", check.Name, "#A8");
1099 //Assert.AreEqual (ProcessorArchitecture.MSIL, check.ProcessorArchitecture, "#A9");
1101 Assert.AreEqual (new Version (0, 0, 0, 0), check.Version, "#A10");
1102 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine, check.VersionCompatibility, "#A11");
1104 using (FileStream fs = File.OpenRead (filename)) {
1105 byte [] buffer = new byte [fs.Length];
1106 fs.Read (buffer, 0, buffer.Length);
1107 a = Assembly.Load (buffer);
1110 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyVersionAttribute));
1111 Assert.IsNotNull (attr, "#A12a");
1112 Assert.AreEqual ("1.2.3.4", ((AssemblyVersionAttribute) attr).Version, "#A12b");
1113 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyCultureAttribute));
1114 Assert.IsNotNull (attr, "#A13a");
1115 Assert.AreEqual ("bar", ((AssemblyCultureAttribute) attr).Culture, "#A13b");
1116 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyAlgorithmIdAttribute));
1117 Assert.IsNotNull (attr, "#A14a");
1118 Assert.AreEqual ((uint) AssemblyHashAlgorithm.MD5, ((AssemblyAlgorithmIdAttribute) attr).AlgorithmId, "#A14b");
1119 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyFlagsAttribute));
1120 Assert.IsNotNull (attr, "#A15a");
1121 Assert.AreEqual ((uint) 0xff, ((AssemblyFlagsAttribute) attr).Flags, "#A15b");
1122 attr = Attribute.GetCustomAttribute (a, typeof (FooAttribute));
1123 Assert.IsNotNull (attr, "#A16");
1125 an = new AssemblyName ();
1126 an.CultureInfo = new CultureInfo ("nl-BE");
1127 an.Flags = AssemblyNameFlags.Retargetable;
1128 an.Name = "TestSetCustomAttributeB";
1130 an.ProcessorArchitecture = ProcessorArchitecture.IA64;
1132 an.Version = new Version (1, 3, 5, 7);
1133 an.VersionCompatibility = AssemblyVersionCompatibility.SameDomain;
1135 ab = domain.DefineDynamicAssembly (an, AssemblyBuilderAccess.Save, tempDir);
1136 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyVersionAttribute).
1137 GetConstructor (new Type [] { typeof (string) }), new object [] { "1.2.3.4" }));
1138 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyCultureAttribute).
1139 GetConstructor (new Type [] { typeof (string) }), new object [] { "en-US" }));
1140 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyAlgorithmIdAttribute).
1141 GetConstructor (new Type [] { typeof (AssemblyHashAlgorithm) }),
1142 new object [] { AssemblyHashAlgorithm.MD5 }));
1143 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyFlagsAttribute).
1144 GetConstructor (new Type [] { typeof (uint) }), new object [] { (uint) 0x0100 }));
1145 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute).
1146 GetConstructor (new Type [] { typeof (bool) }), new object [] { true }));
1147 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (FooAttribute).
1148 GetConstructor (Type.EmptyTypes), new object [0]));
1149 ab.Save ("TestSetCustomAttributeB.dll");
1151 filename = Path.Combine (tempDir, "TestSetCustomAttributeB.dll");
1152 check = AssemblyName.GetAssemblyName (filename);
1153 Assert.AreEqual ("nl-BE", check.CultureInfo.Name, "#B1");
1155 Assert.AreEqual (AssemblyNameFlags.Retargetable, check.Flags, "#B2");
1157 Assert.AreEqual (AssemblyNameFlags.PublicKey | AssemblyNameFlags.Retargetable, check.Flags, "#B2");
1159 Assert.AreEqual ("TestSetCustomAttributeB, Version=1.3.5.7, Culture=nl-BE, PublicKeyToken=null, Retargetable=Yes", check.FullName, "#B3");
1161 Assert.IsNull (check.GetPublicKey (), "#B4");
1163 Assert.AreEqual (new byte [0], check.GetPublicKey (), "#B4");
1166 Assert.AreEqual (new byte [0], check.GetPublicKeyToken (), "#B5");
1168 Assert.IsNull (check.GetPublicKeyToken (), "#B5");
1170 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, check.HashAlgorithm, "#B6");
1171 Assert.IsNull (check.KeyPair, "#B7");
1172 Assert.AreEqual ("TestSetCustomAttributeB", check.Name, "#B8");
1174 //Assert.AreEqual (ProcessorArchitecture.MSIL, check.ProcessorArchitecture, "#B9");
1176 Assert.AreEqual (new Version (1, 3, 5, 7), check.Version, "#B10");
1177 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine, check.VersionCompatibility, "#B11");
1179 using (FileStream fs = File.OpenRead (filename)) {
1180 byte [] buffer = new byte [fs.Length];
1181 fs.Read (buffer, 0, buffer.Length);
1182 a = Assembly.Load (buffer);
1185 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyVersionAttribute));
1186 Assert.IsNotNull (attr, "#B12a");
1187 Assert.AreEqual ("1.2.3.4", ((AssemblyVersionAttribute) attr).Version, "#B12b");
1188 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyCultureAttribute));
1189 Assert.IsNotNull (attr, "#B13a");
1190 Assert.AreEqual ("en-US", ((AssemblyCultureAttribute) attr).Culture, "#B13b");
1191 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyAlgorithmIdAttribute));
1192 Assert.IsNotNull (attr, "#B14a");
1193 Assert.AreEqual ((uint) AssemblyHashAlgorithm.MD5, ((AssemblyAlgorithmIdAttribute) attr).AlgorithmId, "#B14b");
1194 attr = Attribute.GetCustomAttribute (a, typeof (AssemblyFlagsAttribute));
1195 Assert.IsNotNull (attr, "#B15a");
1196 Assert.AreEqual ((uint) 0x0100, ((AssemblyFlagsAttribute) attr).Flags, "#B15b");
1197 attr = Attribute.GetCustomAttribute (a, typeof (FooAttribute));
1198 Assert.IsNotNull (attr, "#B16");
1201 // strongname generated using "sn -k unit.snk"
1202 static byte[] strongName = {
1203 0x07, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x52, 0x53, 0x41, 0x32,
1204 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x7F, 0x7C, 0xEA, 0x4A,
1205 0x28, 0x33, 0xD8, 0x3C, 0x86, 0x90, 0x86, 0x91, 0x11, 0xBB, 0x30, 0x0D,
1206 0x3D, 0x69, 0x04, 0x4C, 0x48, 0xF5, 0x4F, 0xE7, 0x64, 0xA5, 0x82, 0x72,
1207 0x5A, 0x92, 0xC4, 0x3D, 0xC5, 0x90, 0x93, 0x41, 0xC9, 0x1D, 0x34, 0x16,
1208 0x72, 0x2B, 0x85, 0xC1, 0xF3, 0x99, 0x62, 0x07, 0x32, 0x98, 0xB7, 0xE4,
1209 0xFA, 0x75, 0x81, 0x8D, 0x08, 0xB9, 0xFD, 0xDB, 0x00, 0x25, 0x30, 0xC4,
1210 0x89, 0x13, 0xB6, 0x43, 0xE8, 0xCC, 0xBE, 0x03, 0x2E, 0x1A, 0x6A, 0x4D,
1211 0x36, 0xB1, 0xEB, 0x49, 0x26, 0x6C, 0xAB, 0xC4, 0x29, 0xD7, 0x8F, 0x25,
1212 0x11, 0xA4, 0x7C, 0x81, 0x61, 0x97, 0xCB, 0x44, 0x2D, 0x80, 0x49, 0x93,
1213 0x48, 0xA7, 0xC9, 0xAB, 0xDB, 0xCF, 0xA3, 0x34, 0xCB, 0x6B, 0x86, 0xE0,
1214 0x4D, 0x27, 0xFC, 0xA7, 0x4F, 0x36, 0xCA, 0x13, 0x42, 0xD3, 0x83, 0xC4,
1215 0x06, 0x6E, 0x12, 0xE0, 0xA1, 0x3D, 0x9F, 0xA9, 0xEC, 0xD1, 0xC6, 0x08,
1216 0x1B, 0x3D, 0xF5, 0xDB, 0x4C, 0xD4, 0xF0, 0x2C, 0xAA, 0xFC, 0xBA, 0x18,
1217 0x6F, 0x48, 0x7E, 0xB9, 0x47, 0x68, 0x2E, 0xF6, 0x1E, 0x67, 0x1C, 0x7E,
1218 0x0A, 0xCE, 0x10, 0x07, 0xC0, 0x0C, 0xAD, 0x5E, 0xC1, 0x53, 0x70, 0xD5,
1219 0xE7, 0x25, 0xCA, 0x37, 0x5E, 0x49, 0x59, 0xD0, 0x67, 0x2A, 0xBE, 0x92,
1220 0x36, 0x86, 0x8A, 0xBF, 0x3E, 0x17, 0x04, 0xFB, 0x1F, 0x46, 0xC8, 0x10,
1221 0x5C, 0x93, 0x02, 0x43, 0x14, 0x96, 0x6A, 0xD9, 0x87, 0x17, 0x62, 0x7D,
1222 0x3A, 0x45, 0xBE, 0x35, 0xDE, 0x75, 0x0B, 0x2A, 0xCE, 0x7D, 0xF3, 0x19,
1223 0x85, 0x4B, 0x0D, 0x6F, 0x8D, 0x15, 0xA3, 0x60, 0x61, 0x28, 0x55, 0x46,
1224 0xCE, 0x78, 0x31, 0x04, 0x18, 0x3C, 0x56, 0x4A, 0x3F, 0xA4, 0xC9, 0xB1,
1225 0x41, 0xED, 0x22, 0x80, 0xA1, 0xB3, 0xE2, 0xC7, 0x1B, 0x62, 0x85, 0xE4,
1226 0x81, 0x39, 0xCB, 0x1F, 0x95, 0xCC, 0x61, 0x61, 0xDF, 0xDE, 0xF3, 0x05,
1227 0x68, 0xB9, 0x7D, 0x4F, 0xFF, 0xF3, 0xC0, 0x0A, 0x25, 0x62, 0xD9, 0x8A,
1228 0x8A, 0x9E, 0x99, 0x0B, 0xFB, 0x85, 0x27, 0x8D, 0xF6, 0xD4, 0xE1, 0xB9,
1229 0xDE, 0xB4, 0x16, 0xBD, 0xDF, 0x6A, 0x25, 0x9C, 0xAC, 0xCD, 0x91, 0xF7,
1230 0xCB, 0xC1, 0x81, 0x22, 0x0D, 0xF4, 0x7E, 0xEC, 0x0C, 0x84, 0x13, 0x5A,
1231 0x74, 0x59, 0x3F, 0x3E, 0x61, 0x00, 0xD6, 0xB5, 0x4A, 0xA1, 0x04, 0xB5,
1232 0xA7, 0x1C, 0x29, 0xD0, 0xE1, 0x11, 0x19, 0xD7, 0x80, 0x5C, 0xEE, 0x08,
1233 0x15, 0xEB, 0xC9, 0xA8, 0x98, 0xF5, 0xA0, 0xF0, 0x92, 0x2A, 0xB0, 0xD3,
1234 0xC7, 0x8C, 0x8D, 0xBB, 0x88, 0x96, 0x4F, 0x18, 0xF0, 0x8A, 0xF9, 0x31,
1235 0x9E, 0x44, 0x94, 0x75, 0x6F, 0x78, 0x04, 0x10, 0xEC, 0xF3, 0xB0, 0xCE,
1236 0xA0, 0xBE, 0x7B, 0x25, 0xE1, 0xF7, 0x8A, 0xA8, 0xD4, 0x63, 0xC2, 0x65,
1237 0x47, 0xCC, 0x5C, 0xED, 0x7D, 0x8B, 0x07, 0x4D, 0x76, 0x29, 0x53, 0xAC,
1238 0x27, 0x8F, 0x5D, 0x78, 0x56, 0xFA, 0x99, 0x45, 0xA2, 0xCC, 0x65, 0xC4,
1239 0x54, 0x13, 0x9F, 0x38, 0x41, 0x7A, 0x61, 0x0E, 0x0D, 0x34, 0xBC, 0x11,
1240 0xAF, 0xE2, 0xF1, 0x8B, 0xFA, 0x2B, 0x54, 0x6C, 0xA3, 0x6C, 0x09, 0x1F,
1241 0x0B, 0x43, 0x9B, 0x07, 0x95, 0x83, 0x3F, 0x97, 0x99, 0x89, 0xF5, 0x51,
1242 0x41, 0xF6, 0x8E, 0x5D, 0xEF, 0x6D, 0x24, 0x71, 0x41, 0x7A, 0xAF, 0xBE,
1243 0x81, 0x71, 0xAB, 0x76, 0x2F, 0x1A, 0x5A, 0xBA, 0xF3, 0xA6, 0x65, 0x7A,
1244 0x80, 0x50, 0xCE, 0x23, 0xC3, 0xC7, 0x53, 0xB0, 0x7C, 0x97, 0x77, 0x27,
1245 0x70, 0x98, 0xAE, 0xB5, 0x24, 0x66, 0xE1, 0x60, 0x39, 0x41, 0xDA, 0x54,
1246 0x01, 0x64, 0xFB, 0x10, 0x33, 0xCE, 0x8B, 0xBE, 0x27, 0xD4, 0x21, 0x57,
1247 0xCC, 0x0F, 0x1A, 0xC1, 0x3D, 0xF3, 0xCC, 0x39, 0xF0, 0x2F, 0xAE, 0xF1,
1248 0xC0, 0xCD, 0x3B, 0x23, 0x87, 0x49, 0x7E, 0x40, 0x32, 0x6A, 0xD3, 0x96,
1249 0x4A, 0xE5, 0x5E, 0x6E, 0x26, 0xFD, 0x8A, 0xCF, 0x7E, 0xFC, 0x37, 0xDE,
1250 0x39, 0x0C, 0x53, 0x81, 0x75, 0x08, 0xAF, 0x6B, 0x39, 0x6C, 0xFB, 0xC9,
1251 0x79, 0xC0, 0x9B, 0x5F, 0x34, 0x86, 0xB2, 0xDE, 0xC4, 0x19, 0x84, 0x5F,
1252 0x0E, 0xED, 0x9B, 0xB8, 0xD3, 0x17, 0xDA, 0x78 };
1254 static byte [] token = { 0x0e, 0xea, 0x7c, 0xe6, 0x5f, 0x35, 0xf2, 0xd8 };
1257 public void StrongName_MissingKeyFile_NoDelay ()
1259 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyKeyFileAttribute).GetConstructor (new Type [] { typeof (string) }), new object [] { "missing.snk" }));
1260 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute).GetConstructor (new Type [] { typeof (bool) }), new object [] { false }));
1261 ab.Save ("StrongName_MissingKeyFile_NoDelay.dll");
1263 string filename = Path.Combine (tempDir, "StrongName_MissingKeyFile_NoDelay.dll");
1264 AssemblyName check = AssemblyName.GetAssemblyName (filename);
1265 // no exception is thrown (file not found)
1266 // because it's not AssemblyBuilder.Save job to do the signing :-/
1268 Assert.AreEqual (AssemblyNameFlags.None, check.Flags, "#1");
1269 Assert.IsNull (check.GetPublicKey (), "#2");
1270 Assert.IsNotNull (check.GetPublicKeyToken (), "#3a");
1271 Assert.AreEqual (0, check.GetPublicKeyToken ().Length, "#3b");
1273 Assert.AreEqual (AssemblyNameFlags.PublicKey, check.Flags, "#1");
1274 Assert.IsNotNull (check.GetPublicKey (), "#2a");
1275 Assert.AreEqual (0, check.GetPublicKey ().Length, "#2b");
1276 Assert.IsNull (check.GetPublicKeyToken (), "#3");
1278 Assert.IsTrue (check.FullName.IndexOf ("Version=0.0.0.0") != -1, "#4");
1279 Assert.IsTrue (check.FullName.IndexOf ("Culture=neutral") != -1, "#5");
1280 Assert.IsTrue (check.FullName.IndexOf ("PublicKeyToken=null") != -1, "#6");
1284 public void StrongName_KeyFile_Delay ()
1286 string strongfile = Path.Combine (tempDir, "strongname.snk");
1287 using (FileStream fs = File.OpenWrite (strongfile)) {
1288 fs.Write (strongName, 0, strongName.Length);
1291 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyKeyFileAttribute).GetConstructor (new Type [] { typeof (string) }), new object [] { strongfile }));
1292 ab.SetCustomAttribute (new CustomAttributeBuilder (typeof (AssemblyDelaySignAttribute).GetConstructor (new Type [] { typeof (bool) }), new object [] { true }));
1293 ab.Save ("StrongName_KeyFile_Delay.dll");
1295 string filename = Path.Combine (tempDir, "StrongName_KeyFile_Delay.dll");
1296 AssemblyName check = AssemblyName.GetAssemblyName (filename);
1297 // no public key is inserted into the assembly
1298 // because it's not AssemblyBuilder.Save job to do the signing :-/
1300 Assert.AreEqual (AssemblyNameFlags.None, check.Flags, "#1");
1301 Assert.IsNull (check.GetPublicKey (), "#2");
1302 Assert.IsNotNull (check.GetPublicKeyToken (), "#3a");
1303 Assert.AreEqual (0, check.GetPublicKeyToken ().Length, "#3b");
1305 Assert.AreEqual (AssemblyNameFlags.PublicKey, check.Flags, "#1");
1306 Assert.IsNotNull (check.GetPublicKey (), "#2a");
1307 Assert.AreEqual (0, check.GetPublicKey ().Length, "#2b");
1308 Assert.IsNull (check.GetPublicKeyToken (), "#3");
1310 Assert.IsTrue (check.FullName.IndexOf ("Version=0.0.0.0") != -1, "#4");
1311 Assert.IsTrue (check.FullName.IndexOf ("Culture=neutral") != -1, "#5");
1312 Assert.IsTrue (check.FullName.IndexOf ("PublicKeyToken=null") != -1, "#6");
1316 public void StrongName_WithoutAttributes ()
1318 // this demonstrate that AssemblyKeyFileAttribute (or AssemblyKeyNameAttribute)
1319 // aren't required to sign an assembly.
1320 AssemblyName an = genAssemblyName ();
1321 an.KeyPair = new StrongNameKeyPair (strongName);
1322 AssemblyBuilder ab = domain.DefineDynamicAssembly (an, AssemblyBuilderAccess.RunAndSave, tempDir);
1323 ab.Save ("StrongName_WithoutAttributes.dll");
1325 string filename = Path.Combine (tempDir, "StrongName_WithoutAttributes.dll");
1326 AssemblyName check = AssemblyName.GetAssemblyName (filename);
1327 Assert.IsNotNull (check.GetPublicKey (), "#1a");
1328 Assert.IsTrue (check.GetPublicKey ().Length > 0, "#1b");
1329 Assert.AreEqual ("0E-EA-7C-E6-5F-35-F2-D8", BitConverter.ToString (check.GetPublicKeyToken ()), "#2");
1331 Assert.IsTrue (check.FullName.IndexOf ("Version=0.0.0.0") != -1, "#3");
1332 Assert.IsTrue (check.FullName.IndexOf ("Culture=neutral") != -1, "#4");
1333 Assert.IsTrue (check.FullName.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#5");
1334 Assert.AreEqual (AssemblyNameFlags.PublicKey, check.Flags, "#6");
1338 public void SaveUnfinishedTypes ()
1340 mb.DefineType ("TestType", TypeAttributes.Class |
1341 TypeAttributes.Public | TypeAttributes.Sealed |
1342 TypeAttributes.AnsiClass | TypeAttributes.AutoClass,
1345 ab.Save ("def_module");
1347 } catch (NotSupportedException ex) {
1348 // Type 'TestType' was not completed
1349 Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#2");
1350 Assert.IsNull (ex.InnerException, "#3");
1351 Assert.IsNotNull (ex.Message, "#4");
1352 Assert.IsTrue (ex.Message.IndexOf ("TestType") != -1, "#5");
1357 public void GetModules ()
1361 arr = ab.GetModules ();
1362 Assert.IsNotNull (arr, "#A1");
1363 // FIXME: This doesn't work on mono
1364 //Assert.IsTrue (arr.Length >= 2, "#A2");
1365 foreach (Module m in arr)
1366 Assert.AreEqual (typeof (ModuleBuilder), m.GetType (), "#A3");
1368 // Test with no modules
1369 AssemblyBuilder ab2 = genAssembly ();
1370 arr = ab2.GetModules ();
1371 Assert.IsNotNull (arr, "#B1");
1372 Assert.AreEqual (0, arr.Length, "#B2");
1376 [Category ("NotWorking")] // bug #351932
1377 public void GetReferencedAssemblies ()
1379 AssemblyBuilder ab1;
1380 AssemblyBuilder ab2;
1381 AssemblyBuilder ab3;
1382 AssemblyName [] refs;
1390 AssemblyName an1 = genAssemblyName ();
1391 an1.Version = new Version (3, 0);
1392 AssemblyName an2 = genAssemblyName ();
1393 an2.Version = new Version ("1.2.3.4");
1394 an2.KeyPair = new StrongNameKeyPair (strongName);
1395 AssemblyName an3 = genAssemblyName ();
1397 ab1 = domain.DefineDynamicAssembly (an1,
1398 AssemblyBuilderAccess.RunAndSave,
1400 ab2 = domain.DefineDynamicAssembly (an2,
1401 AssemblyBuilderAccess.RunAndSave,
1403 ab3 = domain.DefineDynamicAssembly (an3,
1404 AssemblyBuilderAccess.RunAndSave,
1407 refs = ab1.GetReferencedAssemblies ();
1408 Assert.AreEqual (0, refs.Length, "#A1");
1409 refs = ab2.GetReferencedAssemblies ();
1410 Assert.AreEqual (0, refs.Length, "#A2");
1411 refs = ab3.GetReferencedAssemblies ();
1412 Assert.AreEqual (0, refs.Length, "#A3");
1414 mb1 = ab1.DefineDynamicModule (an1.Name + ".dll");
1415 tb1 = mb1.DefineType ("TestType1", TypeAttributes.Class |
1416 TypeAttributes.Public, typeof (Attribute));
1419 mb2 = ab2.DefineDynamicModule (an2.Name + ".dll");
1420 tb2 = mb2.DefineType ("TestType2", TypeAttributes.Class |
1421 TypeAttributes.Public, tb1);
1424 mb3 = ab3.DefineDynamicModule (an3.Name + ".dll");
1425 tb3 = mb3.DefineType ("TestType3", TypeAttributes.Class |
1426 TypeAttributes.Public, tb1);
1428 tb4 = mb3.DefineType ("TestType4", TypeAttributes.Class |
1429 TypeAttributes.Public, tb2);
1432 refs = ab1.GetReferencedAssemblies ();
1433 Assert.AreEqual (0, refs.Length, "#B1");
1434 refs = ab2.GetReferencedAssemblies ();
1435 Assert.AreEqual (0, refs.Length, "#B2");
1436 refs = ab3.GetReferencedAssemblies ();
1437 Assert.AreEqual (0, refs.Length, "#B3");
1439 ab1.Save (an1.Name + ".dll");
1440 ab2.Save (an2.Name + ".dll");
1441 ab3.Save (an3.Name + ".dll");
1443 refs = ab1.GetReferencedAssemblies ();
1444 Assert.AreEqual (0, refs.Length, "#C1");
1445 refs = ab2.GetReferencedAssemblies ();
1446 Assert.AreEqual (0, refs.Length, "#C2");
1447 refs = ab3.GetReferencedAssemblies ();
1448 Assert.AreEqual (0, refs.Length, "#C3");
1450 string assemblyFile = Path.Combine (tempDir, an1.Name + ".dll");
1452 using (FileStream fs = File.OpenRead (assemblyFile)) {
1453 byte [] buffer = new byte [fs.Length];
1454 fs.Read (buffer, 0, buffer.Length);
1455 Assembly a = Assembly.Load (buffer);
1456 refs = a.GetReferencedAssemblies ();
1457 Assert.AreEqual (1, refs.Length, "#D1");
1459 Assert.IsNull (refs [0].CodeBase, "#D2:CodeBase");
1460 Assert.IsNotNull (refs [0].CultureInfo, "#D2:CultureInfo");
1461 Assert.IsNull (refs [0].EscapedCodeBase, "#D2:EscapedCodeBase");
1462 Assert.AreEqual (AssemblyNameFlags.None, refs [0].Flags, "#D2:Flags");
1463 Assert.AreEqual (Consts.AssemblyCorlib, refs [0].FullName, "#D2:FullName");
1464 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, refs [0].HashAlgorithm, "#D2:HashAlgorithm");
1465 Assert.IsNull (refs [0].KeyPair, "#D2:KeyPair");
1466 Assert.AreEqual ("mscorlib", refs [0].Name, "#D2:Name");
1468 Assert.AreEqual (ProcessorArchitecture.None, refs [0].ProcessorArchitecture, "#D2:PA");
1470 Assert.AreEqual (new Version (Consts.FxVersion), refs [0].Version, "#D2:Version");
1471 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1472 refs [0].VersionCompatibility, "#D2:VersionCompatibility");
1473 Assert.IsNull (refs [0].GetPublicKey (), "#D2:GetPublicKey");
1474 Assert.IsNotNull (refs [0].GetPublicKeyToken (), "#D2:GetPublicKeyToken(a)");
1475 Assert.AreEqual (8, refs [0].GetPublicKeyToken ().Length, "#D2:GetPublicKeyToken(b)");
1476 Assert.AreEqual (refs [0].FullName, refs [0].ToString (), "#D2:ToString");
1479 assemblyFile = Path.Combine (tempDir, an2.Name + ".dll");
1481 using (FileStream fs = File.OpenRead (assemblyFile)) {
1482 byte [] buffer = new byte [fs.Length];
1483 fs.Read (buffer, 0, buffer.Length);
1484 Assembly a = Assembly.Load (buffer);
1485 refs = a.GetReferencedAssemblies ();
1486 Assert.AreEqual (1, refs.Length, "#E1");
1488 Assert.IsNull (refs [0].CodeBase, "#E2:CodeBase");
1489 Assert.IsNotNull (refs [0].CultureInfo, "#E2:CultureInfo(a)");
1490 Assert.AreEqual (CultureInfo.InvariantCulture, refs [0].CultureInfo, "#E2:CultureInfo(b)");
1491 Assert.IsNull (refs [0].EscapedCodeBase, "#E2:EscapedCodeBase");
1492 Assert.AreEqual (AssemblyNameFlags.None, refs [0].Flags, "#E2:Flags");
1493 Assert.AreEqual (an1.Name + ", Version=3.0.0.0, Culture=neutral, PublicKeyToken=null", refs [0].FullName, "#E2:FullName");
1494 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, refs [0].HashAlgorithm, "#E2:HashAlgorithm");
1495 Assert.IsNull (refs [0].KeyPair, "#E2:KeyPair");
1496 Assert.AreEqual (an1.Name, refs [0].Name, "#E2:Name");
1498 Assert.AreEqual (ProcessorArchitecture.None, refs [0].ProcessorArchitecture, "#E2:PA");
1500 Assert.AreEqual (new Version (3, 0, 0, 0), refs [0].Version, "#E2:Version");
1501 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1502 refs [0].VersionCompatibility, "#E2:VersionCompatibility");
1503 Assert.IsNull (refs [0].GetPublicKey (), "#E2:GetPublicKey");
1504 Assert.IsNotNull (refs [0].GetPublicKeyToken (), "#E2:GetPublicKeyToken(a)");
1505 Assert.AreEqual (0, refs [0].GetPublicKeyToken ().Length, "#E2:GetPublicKeyToken(b)");
1506 Assert.AreEqual (refs [0].FullName, refs [0].ToString (), "#E2:ToString");
1509 assemblyFile = Path.Combine (tempDir, an3.Name + ".dll");
1511 using (FileStream fs = File.OpenRead (assemblyFile)) {
1512 byte [] buffer = new byte [fs.Length];
1513 fs.Read (buffer, 0, buffer.Length);
1514 Assembly a = Assembly.Load (buffer);
1515 refs = a.GetReferencedAssemblies ();
1516 Assert.AreEqual (2, refs.Length, "#F1");
1518 Assert.IsNull (refs [0].CodeBase, "#F2:CodeBase");
1519 Assert.IsNotNull (refs [0].CultureInfo, "#F2:CultureInfo(a)");
1520 Assert.AreEqual (CultureInfo.InvariantCulture, refs [0].CultureInfo, "#F2:CultureInfo(b)");
1521 Assert.IsNull (refs [0].EscapedCodeBase, "#F2:EscapedCodeBase");
1522 Assert.AreEqual (AssemblyNameFlags.None, refs [0].Flags, "#F2:Flags");
1523 Assert.AreEqual (an1.Name + ", Version=3.0.0.0, Culture=neutral, PublicKeyToken=null", refs [0].FullName, "#F2:FullName");
1524 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, refs [0].HashAlgorithm, "#F2:HashAlgorithm");
1525 Assert.IsNull (refs [0].KeyPair, "#F2:KeyPair");
1526 Assert.AreEqual (an1.Name, refs [0].Name, "#F2:Name");
1528 Assert.AreEqual (ProcessorArchitecture.None, refs [0].ProcessorArchitecture, "#F2:PA");
1530 Assert.AreEqual (new Version (3, 0, 0, 0), refs [0].Version, "#F2:Version");
1531 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1532 refs [0].VersionCompatibility, "#F2:VersionCompatibility");
1533 Assert.IsNull (refs [0].GetPublicKey (), "#F2:GetPublicKey");
1534 Assert.IsNotNull (refs [0].GetPublicKeyToken (), "#F2:GetPublicKeyToken(a)");
1535 Assert.AreEqual (0, refs [0].GetPublicKeyToken ().Length, "#F2:GetPublicKeyToken(b)");
1536 Assert.AreEqual (refs [0].FullName, refs [0].ToString (), "#F2:ToString");
1538 Assert.IsNull (refs [1].CodeBase, "#F3:CodeBase");
1539 Assert.IsNotNull (refs [1].CultureInfo, "#F3:CultureInfo(a)");
1540 Assert.AreEqual (CultureInfo.InvariantCulture, refs [1].CultureInfo, "#F3:CultureInfo(b)");
1541 Assert.IsNull (refs [1].EscapedCodeBase, "#F3:EscapedCodeBase");
1542 Assert.AreEqual (AssemblyNameFlags.None, refs [1].Flags, "#F3:Flags");
1543 Assert.AreEqual (an2.Name + ", Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8", refs [1].FullName, "#F3:FullName");
1544 Assert.AreEqual (AssemblyHashAlgorithm.SHA1, refs [1].HashAlgorithm, "#F3:HashAlgorithm");
1545 Assert.IsNull (refs [1].KeyPair, "#F3:KeyPair");
1546 Assert.AreEqual (an2.Name, refs [1].Name, "#F3:Name");
1548 Assert.AreEqual (ProcessorArchitecture.None, refs [1].ProcessorArchitecture, "#F3:PA");
1550 Assert.AreEqual (new Version (1, 2, 3, 4), refs [1].Version, "#F3:Version");
1551 Assert.AreEqual (AssemblyVersionCompatibility.SameMachine,
1552 refs [1].VersionCompatibility, "#F3:VersionCompatibility");
1553 Assert.IsNull (refs [1].GetPublicKey (), "#F3:GetPublicKey");
1554 Assert.AreEqual (token, refs [1].GetPublicKeyToken (), "#F3:GetPublicKeyToken");
1555 Assert.AreEqual (refs [1].FullName, refs [1].ToString (), "#F3:ToString");
1559 [Test] // bug #78724
1560 public void GetTypes ()
1562 TypeBuilder tb = mb.DefineType ("sometype");
1565 Type[] types = ab.GetTypes ();
1566 Assert.AreEqual (1, types.Length, "#1");
1567 Assert.AreEqual ("sometype", types[0].Name, "#2");
1571 public void AssemblyName_Culture ()
1573 AssemblyName assemblyName = new AssemblyName ();
1574 assemblyName.Name = "AssemblyNameTest";
1575 assemblyName.Version = new Version ("1.0.0.0");
1576 assemblyName.CultureInfo = new CultureInfo ("en-US");
1578 const string fullName = "AssemblyNameTest, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null";
1579 const string abName = "AssemblyNameTest, Version=1.0.0.0, Culture=en-US";
1581 AssertAssemblyName (tempDir, assemblyName, abName, fullName);
1585 public void AssemblyName_PublicKey ()
1587 AssemblyName assemblyName = new AssemblyName ();
1588 assemblyName.Name = "AssemblyNameTest_PublicKey";
1589 assemblyName.Version = new Version ("1.2.3.4");
1590 assemblyName.KeyPair = new StrongNameKeyPair (strongName);
1592 Assert.AreEqual ("AssemblyNameTest_PublicKey, Version=1.2.3.4", assemblyName.FullName, "#A1");
1594 const string fullName = "AssemblyNameTest_PublicKey, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8";
1596 AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (
1597 assemblyName, AssemblyBuilderAccess.Save, tempDir);
1599 AssemblyName abName = ab.GetName ();
1600 Assert.AreEqual (CultureInfo.InvariantCulture, abName.CultureInfo, "#B1");
1601 Assert.AreEqual (AssemblyNameFlags.PublicKey, abName.Flags, "#B2");
1602 Assert.IsNotNull (abName.GetPublicKey () != null, "#B3a");
1603 Assert.IsTrue (abName.GetPublicKey ().Length > 0, "#B3b");
1604 Assert.IsNotNull (abName.GetPublicKeyToken (), "#B4a");
1605 Assert.IsTrue (abName.GetPublicKeyToken ().Length > 0, "#B4b");
1607 Assert.AreEqual (fullName, abName.FullName, "#B5");
1609 //Assert.AreEqual ("AssemblyNameTest_PublicKey, Version=1.2.3.4, PublicKeyToken=0eea7ce65f35f2d8", abName.FullName, "#B5");
1610 Assert.IsTrue (abName.FullName.IndexOf ("AssemblyNameTest_PublicKey, Version=1.2.3.4") != -1, "#B5a");
1611 Assert.IsTrue (abName.FullName.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#B5b");
1614 ab.Save ("AssemblyNameTest_PublicKey.dll");
1615 AssemblyName bakedName = AssemblyName.GetAssemblyName (Path.Combine(
1616 tempDir, "AssemblyNameTest_PublicKey.dll"));
1618 Assert.AreEqual (CultureInfo.InvariantCulture, bakedName.CultureInfo, "#C1");
1619 Assert.AreEqual (AssemblyNameFlags.PublicKey, bakedName.Flags, "#C2");
1620 Assert.IsNotNull (bakedName.GetPublicKeyToken (), "#C3");
1621 Assert.IsNotNull (bakedName.GetPublicKey (), "#C4");
1622 Assert.AreEqual (fullName, bakedName.FullName, "#C5");
1626 public void AssemblyName_MoreCultureInfo ()
1628 AssemblyName assemblyName = new AssemblyName ();
1629 assemblyName.Name = "AssemblyNameTest_MoreCultureInfo";
1630 assemblyName.Version = new Version ("1.2.3.4");
1631 assemblyName.KeyPair = new StrongNameKeyPair (strongName);
1633 Assert.IsNull (assemblyName.CultureInfo, "#A1");
1634 Assert.AreEqual ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4", assemblyName.FullName, "#A2");
1636 const string fullName = "AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0eea7ce65f35f2d8";
1638 AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly (
1639 assemblyName, AssemblyBuilderAccess.Save, tempDir);
1641 AssemblyName abName = ab.GetName ();
1642 Assert.IsNotNull (abName.CultureInfo != null, "#B1");
1644 Assert.IsTrue (abName.CultureInfo != CultureInfo.InvariantCulture, "#B2a");
1645 Assert.AreEqual (CultureInfo.InvariantCulture.LCID, abName.CultureInfo.LCID, "#B2a");
1646 Assert.AreEqual (AssemblyNameFlags.PublicKey, abName.Flags, "#B3");
1647 Assert.AreEqual (fullName, abName.FullName, "#B4");
1649 Assert.AreEqual (CultureInfo.InvariantCulture, abName.CultureInfo, "#B2");
1650 Assert.AreEqual (AssemblyNameFlags.PublicKey, abName.Flags, "#B3");
1651 //Assert.AreEqual ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4, PublicKeyToken=0eea7ce65f35f2d8", abName.FullName, "#B4");
1652 Assert.IsTrue (abName.FullName.IndexOf ("AssemblyNameTest_MoreCultureInfo, Version=1.2.3.4") != -1, "#B4a");
1653 Assert.IsTrue (abName.FullName.IndexOf ("PublicKeyToken=0eea7ce65f35f2d8") != -1, "#B4b");
1656 ab.Save ("AssemblyNameTest_MoreCultureInfo.dll");
1658 AssemblyName bakedName = AssemblyName.GetAssemblyName (Path.Combine(
1659 tempDir, "AssemblyNameTest_MoreCultureInfo.dll"));
1661 Assert.IsNotNull (bakedName.CultureInfo, "#C1");
1664 Assert.IsTrue (abName.CultureInfo != CultureInfo.InvariantCulture, "#C2a");
1665 Assert.AreEqual (CultureInfo.InvariantCulture.LCID, abName.CultureInfo.LCID, "#C2b");
1667 Assert.AreEqual (CultureInfo.InvariantCulture, bakedName.CultureInfo, "#C2");
1669 Assert.AreEqual (fullName, bakedName.FullName, "#C3");
1673 public void AssemblyName_NoVersion ()
1675 AssemblyName assemblyName = new AssemblyName ();
1676 assemblyName.Name = "AssemblyNameTest";
1678 const string fullName = "AssemblyNameTest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null";
1679 const string abName = "AssemblyNameTest, Version=0.0.0.0";
1681 AssertAssemblyName (tempDir, assemblyName, abName, fullName);
1685 public void AssemblyName_Version ()
1687 AssemblyName assemblyName = new AssemblyName ();
1688 assemblyName.Name = "AssemblyNameTest";
1689 assemblyName.Version = new Version (1, 2, 3, 4);
1691 string fullName = "AssemblyNameTest, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null";
1692 string abName = "AssemblyNameTest, Version=1.2.3.4";
1694 AssertAssemblyName (tempDir, assemblyName, abName, fullName);
1696 assemblyName = new AssemblyName ();
1697 assemblyName.Name = "AssemblyNameTest";
1698 assemblyName.Version = new Version (1, 2);
1700 fullName = "AssemblyNameTest, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null";
1701 abName = "AssemblyNameTest, Version=1.2.0.0";
1703 AssertAssemblyName (tempDir, assemblyName, abName, fullName);
1707 public void GetType_IgnoreCase ()
1709 TypeBuilder tb = mb.DefineType ("Foo.Test2", TypeAttributes.Public, typeof (object));
1714 t = ab.GetType ("foo.Test2", true, true);
1715 Assert.AreEqual ("Test2", t.Name, "#1");
1717 t = ab.GetType ("foo.test2", true, true);
1718 Assert.AreEqual ("Test2", t.Name, "#2");
1720 t = ab.GetType ("Foo.test2", true, true);
1721 Assert.AreEqual ("Test2", t.Name, "#3");
1726 public void TestGetType ()
1728 TypeBuilder tb = mb.DefineType ("Test", TypeAttributes.Public);
1730 Assert.IsNull (ab.GetType ("Test", false, true), "#1");
1732 ab.GetType ("Test", true, true);
1734 } catch (TypeLoadException) { }
1736 var res = tb.CreateType ();
1738 Assert.AreSame (res, ab.GetType ("Test", false, true), "#3");
1742 public void GetModule ()
1744 var ab = genAssembly ();
1745 Assert.IsNull (ab.GetModule ("Foo"), "#1");
1747 var modA = ab.DefineDynamicModule ("Foo");
1748 var modB = ab.DefineDynamicModule ("Bar");
1750 Assert.AreSame (modA, ab.GetModule ("Foo"), "#2");
1751 Assert.AreSame (modB, ab.GetModule ("Bar"), "#3");
1752 Assert.IsNull (ab.GetModule ("FooBar"), "#4");
1756 public void GetModules2 ()
1758 //XXX this is not the v4 behavior since it returns
1759 //the manifest module in the place of the first one
1760 var ab = genAssembly ();
1761 var modA = ab.DefineDynamicModule ("Foo");
1762 var modB = ab.DefineDynamicModule ("Bar");
1763 Assert.AreEqual (2, ab.GetModules ().Length, "#1");
1764 Assert.AreSame (modA, ab.GetModules () [0], "#2");
1765 Assert.AreSame (modB, ab.GetModules () [1], "#3");
1769 [Category ("NotDotNet")] // MS returns the real deal
1770 public void GetReferencedAssemblies_Trivial ()
1772 Assert.IsNotNull (ab.GetReferencedAssemblies (), "#1");
1776 public void GetLoadedModules ()
1778 var res = ab.GetLoadedModules (true);
1779 Assert.IsNotNull (res, "#1");
1780 Assert.AreEqual (1, res.Length, "#2");
1781 Assert.AreEqual (mb, res [0], "#3");
1784 [ExpectedException (typeof (TypeLoadException))]
1785 public void GetCustomAttributes_NotCreated ()
1787 AssemblyBuilder ab = genAssembly ();
1788 ModuleBuilder mb = ab.DefineDynamicModule("tester", "tester.dll", false);
1789 TypeBuilder tb = mb.DefineType ("T");
1790 tb.SetParent (typeof (Attribute));
1791 ConstructorBuilder ctor = tb.DefineDefaultConstructor (MethodAttributes.Public);
1792 object [] o = new object [0];
1793 CustomAttributeBuilder cab = new CustomAttributeBuilder (ctor, o);
1794 ab.SetCustomAttribute (cab);
1796 ab.GetCustomAttributes (true);
1801 public void GetTypesWithUnfinishedTypeBuilder ()
1803 AssemblyBuilder ab = genAssembly ();
1804 ModuleBuilder mb = ab.DefineDynamicModule("tester", "tester.dll", false);
1805 mb.DefineType ("K").CreateType ();
1806 var tb = mb.DefineType ("T");
1811 } catch (ReflectionTypeLoadException ex) {
1812 Assert.AreEqual (1, ex.Types.Length, "#2");
1813 Assert.AreEqual (1, ex.LoaderExceptions.Length, "#3");
1814 Assert.IsNull (ex.Types [0], "#4");
1815 Assert.IsTrue (ex.LoaderExceptions [0] is TypeLoadException, "#5");
1819 var types = ab.GetTypes ();
1820 Assert.AreEqual (2, types.Length, "#5");
1821 foreach (var t in types)
1822 Assert.IsFalse (t is TypeBuilder, "#6_" + t.Name);
1825 private static void AssertAssemblyName (string tempDir, AssemblyName assemblyName, string abName, string fullName)
1827 AppDomain currentDomain = AppDomain.CurrentDomain;
1828 AppDomain newDomain = null;
1831 AssemblyBuilder ab = currentDomain.DefineDynamicAssembly (
1832 assemblyName, AssemblyBuilderAccess.Save, tempDir);
1833 ab.Save (assemblyName.Name + ".dll");
1836 // on .NET 2.0, the full name of the AssemblyBuilder matches the
1837 // fully qualified assembly name
1838 Assert.AreEqual (fullName, ab.FullName, "#1");
1840 //Assert.AreEqual (abName, ab.FullName, "#1");
1843 AssemblyName an = ab.GetName ();
1845 Assert.AreEqual (AssemblyNameFlags.PublicKey, an.Flags, "#2");
1846 Assert.IsNotNull (an.GetPublicKey (), "#3a");
1847 Assert.AreEqual (0, an.GetPublicKey ().Length, "#3b");
1849 Assert.IsNotNull (an.GetPublicKeyToken (), "#4a");
1850 Assert.AreEqual (0, an.GetPublicKeyToken ().Length, "#4b");
1852 Assert.IsNull (an.GetPublicKeyToken (), "#4");
1855 // load assembly in separate domain, so we can clean-up after the
1857 newDomain = AppDomain.CreateDomain ("test2", currentDomain.Evidence,
1858 currentDomain.SetupInformation);
1860 Helper helper = new Helper (Path.Combine (tempDir, assemblyName.Name + ".dll"),
1862 newDomain.DoCallBack (new CrossAppDomainDelegate (helper.Test));
1864 if (newDomain != null) {
1865 AppDomain.Unload (newDomain);
1871 private class Helper
1873 private readonly string _assemblyPath;
1874 private readonly string _assemblyName;
1876 public Helper (string assemblyPath, string assemblyName)
1878 _assemblyPath = assemblyPath;
1879 _assemblyName = assemblyName;
1884 AssemblyName assemblyName = AssemblyName.GetAssemblyName (_assemblyPath);
1885 Assert.AreEqual (_assemblyName, assemblyName.ToString ());