+
+
+ [Test]//Bug #7126
+ public void CannotCreateInstanceOfSaveOnlyAssembly ()
+ {
+ var asm_builder = genAssembly (AssemblyBuilderAccess.Save);
+ var mod_builder = asm_builder.DefineDynamicModule("Foo", "Foo.dll");
+
+ var type_builder = mod_builder.DefineType("Foo",
+ TypeAttributes.Public | TypeAttributes.Sealed |
+ TypeAttributes.Class | TypeAttributes.BeforeFieldInit);
+
+ var type = type_builder.CreateType();
+
+ try {
+ Activator.CreateInstance(type);
+ Assert.Fail ("Cannot create instance of save only type");
+ } catch (NotSupportedException e) {
+ }
+ }
+
+ class AssemblyBuilderResolver {
+ private Assembly mock;
+ private ResolveEventHandler d;
+ private string theName;
+
+ public AssemblyBuilderResolver (string theName) {
+ mock = CreateMock (theName);
+ d = new ResolveEventHandler (HandleResolveEvent);
+ this.theName = theName;
+ }
+
+ public void StartHandling () {
+ AppDomain.CurrentDomain.AssemblyResolve += d;
+ }
+
+ public void StopHandling () {
+ AppDomain.CurrentDomain.AssemblyResolve -= d;
+ }
+
+ public Assembly HandleResolveEvent (Object sender, ResolveEventArgs args) {
+ if (args.Name.StartsWith (theName))
+ return mock;
+ else
+ return null;
+ }
+
+ private static Assembly CreateMock (string name) {
+ var an = new AssemblyName (name);
+ var ab = AssemblyBuilder.DefineDynamicAssembly (an, AssemblyBuilderAccess.ReflectionOnly);
+ var mb = ab.DefineDynamicModule (an.Name);
+
+ // Just make some content for the assembly
+ var tb = mb.DefineType ("Foo", TypeAttributes.Public);
+ tb.DefineDefaultConstructor (MethodAttributes.Public);
+
+ tb.CreateType ();
+
+ return ab;
+ }
+ }
+
+ [Test]
+ public void ResolveEventHandlerReflectionOnlyError ()
+ {
+ // Regression test for 57850.
+
+ // If a ResolveEventHandler returns a reflection-only
+ // AssemblyBuilder, we should throw a FileNotFoundException.
+ var s = "ResolveEventHandlerReflectionOnlyErrorAssembly";
+ var h = new AssemblyBuilderResolver (s);
+ Assert.Throws<FileNotFoundException>(() => {
+ h.StartHandling ();
+ var aName = new AssemblyName (s);
+ try {
+ AppDomain.CurrentDomain.Load (aName);
+ } finally {
+ h.StopHandling ();
+ }
+ });
+ }
+
+