public void SharedLibCopy_Different() { string libBaseName = "LibBase_" + Guid.NewGuid(); string lib1Name = "Lib1_" + Guid.NewGuid(); string lib2Name = "Lib2_" + Guid.NewGuid(); var libBase1 = TestCompilationFactory.CreateCSharpCompilation(@" public class LibBase { public readonly int X = 1; } ", new[] { TestReferences.NetFx.v4_0_30319.mscorlib }, libBaseName); var libBase2 = TestCompilationFactory.CreateCSharpCompilation(@" public class LibBase { public readonly int X = 2; } ", new[] { TestReferences.NetFx.v4_0_30319.mscorlib }, libBaseName); var lib1 = TestCompilationFactory.CreateCSharpCompilation(@" public class Lib1 { public LibBase libBase = new LibBase(); } ", new MetadataReference[] { TestReferences.NetFx.v4_0_30319.mscorlib, libBase1.ToMetadataReference() }, lib1Name); var lib2 = TestCompilationFactory.CreateCSharpCompilation(@" public class Lib2 { public LibBase libBase = new LibBase(); } ", new MetadataReference[] { TestReferences.NetFx.v4_0_30319.mscorlib, libBase1.ToMetadataReference() }, lib2Name); var libBase1Image = libBase1.EmitToArray(); var libBase2Image = libBase2.EmitToArray(); var lib1Image = lib1.EmitToArray(); var lib2Image = lib2.EmitToArray(); var root = Temp.CreateDirectory(); var dir1 = root.CreateDirectory("1"); var file1 = dir1.CreateFile(lib1Name + ".dll").WriteAllBytes(lib1Image); var fileBase1 = dir1.CreateFile(libBaseName + ".dll").WriteAllBytes(libBase1Image); var dir2 = root.CreateDirectory("2"); var file2 = dir2.CreateFile(lib2Name + ".dll").WriteAllBytes(lib2Image); var fileBase2 = dir2.CreateFile(libBaseName + ".dll").WriteAllBytes(libBase2Image); var runner = CreateRunner(input: $@"#r ""{file1.Path}"" var l1 = new Lib1(); #r ""{file2.Path}"" var l2 = new Lib2(); "); runner.RunInteractive(); AssertEx.AssertEqualToleratingWhitespaceDifferences( $@"Microsoft (R) Visual C# Interactive Compiler version {CompilerVersion} Copyright (C) Microsoft Corporation. All rights reserved. Type ""#help"" for more information. > #r ""{file1.Path}"" > var l1 = new Lib1(); > #r ""{file2.Path}"" > var l2 = new Lib2(); «Red» Assembly '{libBaseName}, Version=0.0.0.0' has already been loaded from '{fileBase1.Path}'. A different assembly with the same name and version can't be loaded: '{fileBase2.Path}'. «Gray» > ", runner.Console.Out.ToString()); }
public void SharedLibCopy_Different() { string libBaseName = "LibBase_" + Guid.NewGuid(); string lib1Name = "Lib1_" + Guid.NewGuid(); string lib2Name = "Lib2_" + Guid.NewGuid(); var libBase1 = TestCompilationFactory.CreateCSharpCompilation(@" public class LibBase { public readonly int X = 1; } ", new[] { TestReferences.NetFx.v4_0_30319.mscorlib }, libBaseName); var libBase2 = TestCompilationFactory.CreateCSharpCompilation(@" public class LibBase { public readonly int X = 2; } ", new[] { TestReferences.NetFx.v4_0_30319.mscorlib }, libBaseName); var lib1 = TestCompilationFactory.CreateCSharpCompilation(@" public class Lib1 { public LibBase libBase = new LibBase(); } ", new MetadataReference[] { TestReferences.NetFx.v4_0_30319.mscorlib, libBase1.ToMetadataReference() }, lib1Name); var lib2 = TestCompilationFactory.CreateCSharpCompilation(@" public class Lib2 { public LibBase libBase = new LibBase(); } ", new MetadataReference[] { TestReferences.NetFx.v4_0_30319.mscorlib, libBase1.ToMetadataReference() }, lib2Name); var libBase1Image = libBase1.EmitToArray(); var libBase2Image = libBase2.EmitToArray(); var lib1Image = lib1.EmitToArray(); var lib2Image = lib2.EmitToArray(); var root = Temp.CreateDirectory(); var dir1 = root.CreateDirectory("1"); var file1 = dir1.CreateFile(lib1Name + ".dll").WriteAllBytes(lib1Image); var fileBase1 = dir1.CreateFile(libBaseName + ".dll").WriteAllBytes(libBase1Image); var dir2 = root.CreateDirectory("2"); var file2 = dir2.CreateFile(lib2Name + ".dll").WriteAllBytes(lib2Image); var fileBase2 = dir2.CreateFile(libBaseName + ".dll").WriteAllBytes(libBase2Image); var runner = CreateRunner(input: $@"#r ""{file1.Path}"" var l1 = new Lib1(); #r ""{file2.Path}"" var l2 = new Lib2(); "); runner.RunInteractive(); AssertEx.AssertEqualToleratingWhitespaceDifferences( $@"{LogoAndHelpPrompt} > #r ""{file1.Path}"" > var l1 = new Lib1(); > #r ""{file2.Path}"" > var l2 = new Lib2(); «Red» { string.Format(ScriptingResources.AssemblyAlreadyLoaded, libBaseName, "0.0.0.0", fileBase1.Path, fileBase2.Path) } «Gray» > ", runner.Console.Out.ToString()); }