Skip to content

Commit 4a2a9c0

Browse files
committed
Unit test fix - TestCompileAndRun_MetadataReference
GeneratedCode in RazorEngineCompilationException Version and authors
1 parent ba0cc33 commit 4a2a9c0

File tree

5 files changed

+49
-31
lines changed

5 files changed

+49
-31
lines changed

Pack.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
dotnet build -c Release
22
dotnet test
33
dotnet pack -c Release -o artifacts RazorEngineCore\RazorEngineCore.csproj
4-
dotnet nuget push artifacts\RazorEngineCore.2020.5.2.nupkg --source https://www.nuget.org/api/v2/package -k KEY
4+
dotnet nuget push artifacts\RazorEngineCore.2020.6.1.nupkg --source https://www.nuget.org/api/v2/package -k KEY

RazorEngineCore.Tests/TestCompileAndRun.cs

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.IO;
34
using System.Linq;
45
using System.Reflection;
@@ -477,37 +478,48 @@ public static string GetGreeting(string name)
477478
}
478479
}
479480
";
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+
481515
RazorEngine razorEngine = new RazorEngine();
482516
IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync(@"
483517
@using TestAssembly
484518
<p>@Greeting.GetGreeting(""Name"")</p>
485519
", builder =>
486520
{
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;
504521
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+
511523
});
512524

513525
string expected = @"

RazorEngineCore/RazorEngine.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ private MemoryStream CreateAndCompileToStream(string templateSource, RazorEngine
8383
},
8484
options.ReferencedAssemblies
8585
.Select(ass => MetadataReference.CreateFromFile(ass.Location))
86-
.Concat(options.MetadataReferences).ToList(),
86+
.Concat(options.MetadataReferences)
87+
.ToList(),
8788
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
8889

8990
MemoryStream memoryStream = new MemoryStream();
@@ -96,6 +97,7 @@ private MemoryStream CreateAndCompileToStream(string templateSource, RazorEngine
9697

9798
RazorEngineCompilationException exception = new RazorEngineCompilationException($"Unable to compile template: {errors?.FirstOrDefault()}");
9899
exception.Errors = errors;
100+
exception.GeneratedCode = razorCSharpDocument.GeneratedCode;
99101

100102
throw exception;
101103
}

RazorEngineCore/RazorEngineCompilationException.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ public RazorEngineCompilationException(string message, Exception innerException)
2424
}
2525

2626
public List<Diagnostic> Errors { get; set; }
27+
public string GeneratedCode { get; set; }
2728
}
2829
}

RazorEngineCore/RazorEngineCore.csproj

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22
<PropertyGroup>
33
<TargetFramework>netstandard2.0</TargetFramework>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
5-
<Version>2020.5.2</Version>
6-
<Authors>Alexander Selishchev, Simon Mourier, William David Cossey</Authors>
5+
<Version>2020.6.1</Version>
6+
<Authors>Alexander Selishchev, Simon Mourier, William David Cossey, Benjamin Smith</Authors>
77
<PackageProjectUrl>https://github.com/adoconnection/RazorEngineCore</PackageProjectUrl>
88
<Description>ASP.NET Core 3.1 Razor Template Engine</Description>
9-
<AssemblyVersion>2020.5.2.0</AssemblyVersion>
10-
<FileVersion>2020.5.2.0</FileVersion>
9+
<AssemblyVersion>2020.6.1.0</AssemblyVersion>
10+
<FileVersion>2020.6.1.0</FileVersion>
11+
<PackageReleaseNotes>– Add support for loading assemblies through MetadataReference
12+
– Microsoft.AspNetCore.Razor.Language update to 3.1.5
13+
– expose generated code in RazorEngineCompilationException</PackageReleaseNotes>
1114
</PropertyGroup>
1215
<ItemGroup>
13-
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="3.1.4" />
16+
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="3.1.5" />
1417
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.6.0" />
1518
</ItemGroup>
1619
</Project>

0 commit comments

Comments
 (0)