Example #1
0
        public void SuccessfullyReferenceADll()
        {
            var compiler  = new Compiler();
            var assembly1 = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Version() {return 1;}}");
            var assembly2 = compiler.CompileAndCopyLocal("Bar", @"public class Bar{public int AccessFoo() {return new Foo().Version();}}", assembly1);

            dynamic foo = Assembly.LoadFrom(assembly1.FilePath).CreateInstance("Foo");
            dynamic bar = Assembly.LoadFrom(assembly2.FilePath).CreateInstance("Bar");

            Assert.AreEqual(1, bar.AccessFoo());
        }
Example #2
0
        public void MethodNotFound()
        {
            var compiler = new Compiler();
            var fooV1    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Deprecated() {return 1;}}");
            var barV1    = compiler.CompileAndCopyLocal("Bar", @"public class Bar{public int AccessFoo() {return new Foo().Deprecated();}}", fooV1);
            var fooV2    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{}");

            dynamic foo = fooV2.CreateInstance("Foo");
            dynamic bar = barV1.CreateInstance("Bar");

            Assert.Throws <MissingMethodException>(() => bar.AccessFoo());
        }
Example #3
0
        public void UpgradeAfterCompile()
        {
            var compiler = new Compiler();
            var fooV1    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Version() {return 1;}}");
            var barV1    = compiler.CompileAndCopyLocal("Bar", @"public class Bar{public int AccessFoo() {return new Foo().Version();}}", fooV1);
            var fooV2    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Version() {return 2;}}");

            dynamic foo = fooV2.CreateInstance("Foo");
            dynamic bar = barV1.CreateInstance("Bar");

            Assert.AreEqual(2, bar.AccessFoo());
        }
Example #4
0
        public void MajorVersionsCanCoexist()
        {
            var compiler = new Compiler();
            var fooV1    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Deprecated() {return 1;}}", version: new Version(1, 0, 0, 0)).Rename("Foo_deprecated.dll");
            var barV1    = compiler.CompileAndCopyLocal("Bar", @"public class Bar{public int AccessFoo() {return new Foo().Deprecated();}}", fooV1);
            var fooV2    = compiler.CompileAndCopyLocal("Foo", @"public class Foo{}", version: new Version(2, 0, 0, 0)).Rename("Foo_missing.dll");

            dynamic foo2 = fooV2.CreateInstance("Foo");
            dynamic foo1 = fooV1.CreateInstance("Foo");
            dynamic bar  = barV1.CreateInstance("Bar");

            Assert.DoesNotThrow(() => bar.AccessFoo());
        }
Example #5
0
        public void FailToReferenceADll()
        {
            var compiler  = new Compiler();
            var assembly1 = compiler.CompileAndCopyLocal("Foo", @"public class Foo{public int Version() {return 1;}}");
            var assembly2 = compiler.CompileAndCopyLocal("Bar", @"public class Bar{public int AccessFoo() {return new Foo().Version();}}", assembly1);

            dynamic foo = Assembly.LoadFile(assembly1.FilePath).CreateInstance("Foo");
            dynamic bar = Assembly.LoadFile(assembly2.FilePath).CreateInstance("Bar");

            Assert.AreEqual(1, foo.Version());
            var ex = Assert.Throws <FileNotFoundException>(() => bar.AccessFoo());

            StringAssert.Contains(assembly1.AssemblyName, ex.Message);
        }
Example #6
0
        public void CanCompileADllAgainstADependency()
        {
            var compiler = new CSharpCodeProvider();

            var cs1       = @"public class Foo{public int Version() {return 1;}}";
            var assembly1 = compiler
                            .CompileAssemblyFromSource(new CompilerParameters(new string[0], "foo.dll"), cs1)
                            .CompiledAssembly;
            var cs2       = @"public class Bar{public int AccessFoo() {return new Foo().Version();}}";
            var assembly2 = compiler
                            .CompileAssemblyFromSource(new CompilerParameters(new[] { "foo.dll" }, "bar.dll"), cs2);

            CollectionAssert.IsEmpty(assembly2.Errors);
            dynamic bar = assembly2.CompiledAssembly.CreateInstance("Bar");

            Assert.AreEqual(1, bar.AccessFoo());
        }