|
1 | 1 | using Microsoft.CodeAnalysis; |
2 | 2 | using Microsoft.CodeAnalysis.CSharp; |
| 3 | +using Microsoft.CodeAnalysis.Operations; |
3 | 4 | using System; |
4 | 5 | using System.Collections.Generic; |
5 | 6 | using System.IO; |
|
11 | 12 | namespace Basic.Reference.Assemblies.UnitTests; |
12 | 13 | internal static class CompilationUtil |
13 | 14 | { |
14 | | - public static MemoryStream CompileToLibrary(string code, string assemblyName) |
| 15 | + public static MemoryStream CompileToLibrary(string code, string assemblyName, IEnumerable<MetadataReference> references) |
15 | 16 | { |
16 | | - var references = |
17 | | -#if NET |
18 | | - Net80.References.All; |
19 | | -#else |
20 | | - Net461.References.All; |
21 | | -#endif |
22 | 17 | var options = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary); |
23 | 18 | var compilation = CSharpCompilation.Create( |
24 | 19 | assemblyName, |
@@ -48,23 +43,23 @@ static string GetMessage(IEnumerable<Diagnostic> diagnostics) |
48 | 43 | } |
49 | 44 | } |
50 | 45 |
|
51 | | - public static Assembly CompileToLibraryAndLoad(string code, string assemblyName) |
| 46 | + public static Assembly CompileToLibraryAndLoad(string code, string assemblyName, IEnumerable<MetadataReference> references) |
52 | 47 | { |
53 | | - var stream = CompileToLibrary(code, assemblyName); |
| 48 | + var stream = CompileToLibrary(code, assemblyName, references); |
54 | 49 | return Load(stream, assemblyName); |
55 | 50 | } |
56 | 51 |
|
57 | 52 | /// <summary> |
58 | 53 | /// Compile and run the code expecting to find a static Lib.Go method |
59 | 54 | /// </summary> |
60 | | - public static string? CompileAndRun(string code, string assemblyName) |
| 55 | + public static string? CompileAndRun(string code, string assemblyName, IEnumerable<MetadataReference> references) |
61 | 56 | { |
62 | | - var assembly = CompileToLibraryAndLoad(code, assemblyName); |
| 57 | + var assembly = CompileToLibraryAndLoad(code, assemblyName, references); |
63 | 58 | var libType = assembly |
64 | 59 | .GetTypes() |
65 | 60 | .Where(x => x.Name == "Lib") |
66 | 61 | .Single(); |
67 | | - var method = libType.GetMethod("Go", BindingFlags.Static | BindingFlags.NonPublic); |
| 62 | + var method = libType.GetMethod("Go", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); |
68 | 63 | var obj = method!.Invoke(null, null); |
69 | 64 | return (string?)obj; |
70 | 65 | } |
|
0 commit comments