|
1 | 1 | using System; |
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.IO; |
3 | 4 | using System.Linq; |
4 | 5 | using System.Reflection; |
@@ -477,37 +478,48 @@ public static string GetGreeting(string name) |
477 | 478 | } |
478 | 479 | } |
479 | 480 | "; |
480 | | - |
| 481 | + // This needs to be done in the builder to have access to all of the assemblies added through |
| 482 | + // the various AddAssemblyReference options |
| 483 | + CSharpCompilation compilation = CSharpCompilation.Create( |
| 484 | + "TestAssembly", |
| 485 | + new[] |
| 486 | + { |
| 487 | + CSharpSyntaxTree.ParseText(greetingClass) |
| 488 | + }, |
| 489 | + new List<MetadataReference>() |
| 490 | + { |
| 491 | + MetadataReference.CreateFromFile(typeof(object).Assembly.Location), |
| 492 | + MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.CSharp")).Location), |
| 493 | + MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("netstandard")).Location), |
| 494 | + MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Runtime")).Location) |
| 495 | + }, |
| 496 | + new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) |
| 497 | + ); |
| 498 | + |
| 499 | + MemoryStream memoryStream = new MemoryStream(); |
| 500 | + EmitResult emitResult = compilation.Emit(memoryStream); |
| 501 | + |
| 502 | + if (!emitResult.Success) |
| 503 | + { |
| 504 | + Assert.Fail("Unable to compile test assembly"); |
| 505 | + } |
| 506 | + |
| 507 | + memoryStream.Position = 0; |
| 508 | + |
| 509 | + // Add an assembly resolver so the assembly can be found |
| 510 | + AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => |
| 511 | + new AssemblyName(eventArgs.Name ?? string.Empty).Name == "TestAssembly" |
| 512 | + ? Assembly.Load(memoryStream.ToArray()) |
| 513 | + : null; |
| 514 | + |
481 | 515 | RazorEngine razorEngine = new RazorEngine(); |
482 | 516 | IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync(@" |
483 | 517 | @using TestAssembly |
484 | 518 | <p>@Greeting.GetGreeting(""Name"")</p> |
485 | 519 | ", builder => |
486 | 520 | { |
487 | | - // This needs to be done in the builder to have access to all of the assemblies added through |
488 | | - // the various AddAssemblyReference options |
489 | | - CSharpCompilation compilation = CSharpCompilation.Create( |
490 | | - "TestAssembly", |
491 | | - new [] |
492 | | - { |
493 | | - CSharpSyntaxTree.ParseText(greetingClass) |
494 | | - }, |
495 | | - builder.Options.ReferencedAssemblies |
496 | | - .Select(ass => MetadataReference.CreateFromFile(ass.Location)).ToList(), |
497 | | - new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) |
498 | | - ); |
499 | | - MemoryStream memoryStream = new MemoryStream(); |
500 | | - EmitResult emitResult = compilation.Emit(memoryStream); |
501 | | - if (!emitResult.Success) return; |
502 | | - |
503 | | - memoryStream.Position = 0; |
504 | 521 | builder.AddMetadataReference(MetadataReference.CreateFromStream(memoryStream)); |
505 | | - |
506 | | - // Add an assembly resolver so the assembly can be found |
507 | | - AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => |
508 | | - new AssemblyName(eventArgs.Name ?? string.Empty).Name == "TestAssembly" |
509 | | - ? Assembly.Load(memoryStream.ToArray()) |
510 | | - : null; |
| 522 | + |
511 | 523 | }); |
512 | 524 |
|
513 | 525 | string expected = @" |
|
0 commit comments