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()); }
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()); }
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()); }
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()); }
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); }
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()); }