parent
11ee402eec
commit
5369842384
|
|
@ -23,6 +23,11 @@ namespace Microsoft.AspNet.Razor.Generator
|
||||||
|
|
||||||
public CodeTreeBuilder CodeTreeBuilder { get; set; }
|
public CodeTreeBuilder CodeTreeBuilder { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <c>SHA1</c> based checksum for the file whose location is defined by <see cref="SourceFile"/>.
|
||||||
|
/// </summary>
|
||||||
|
public string Checksum { get; set; }
|
||||||
|
|
||||||
public static CodeGeneratorContext Create(RazorEngineHost host, string className, string rootNamespace, string sourceFile, bool shouldGenerateLinePragmas)
|
public static CodeGeneratorContext Create(RazorEngineHost host, string className, string rootNamespace, string sourceFile, bool shouldGenerateLinePragmas)
|
||||||
{
|
{
|
||||||
return new CodeGeneratorContext()
|
return new CodeGeneratorContext()
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
public class CSharpCodeBuilder : CodeBuilder
|
public class CSharpCodeBuilder : CodeBuilder
|
||||||
{
|
{
|
||||||
|
// See http://msdn.microsoft.com/en-us/library/system.codedom.codechecksumpragma.checksumalgorithmid.aspx
|
||||||
|
private const string Sha1AlgorithmId = "{ff1816ec-aa5e-4d10-87f7-6f4963833460}";
|
||||||
private const int DisableAsyncWarning = 1998;
|
private const int DisableAsyncWarning = 1998;
|
||||||
|
|
||||||
public CSharpCodeBuilder(CodeGeneratorContext context)
|
public CSharpCodeBuilder(CodeGeneratorContext context)
|
||||||
|
|
@ -24,6 +26,17 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
{
|
{
|
||||||
var writer = new CSharpCodeWriter();
|
var writer = new CSharpCodeWriter();
|
||||||
|
|
||||||
|
if (!Host.DesignTimeMode && !string.IsNullOrEmpty(Context.Checksum))
|
||||||
|
{
|
||||||
|
writer.Write("#pragma checksum \"")
|
||||||
|
.Write(Context.SourceFile)
|
||||||
|
.Write("\" \"")
|
||||||
|
.Write(Sha1AlgorithmId)
|
||||||
|
.Write("\" \"")
|
||||||
|
.Write(Context.Checksum)
|
||||||
|
.WriteLine("\"");
|
||||||
|
}
|
||||||
|
|
||||||
using (writer.BuildNamespace(Context.RootNamespace))
|
using (writer.BuildNamespace(Context.RootNamespace))
|
||||||
{
|
{
|
||||||
// Write out using directives
|
// Write out using directives
|
||||||
|
|
@ -102,7 +115,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
string taskNamespace = typeof(Task).Namespace;
|
string taskNamespace = typeof(Task).Namespace;
|
||||||
|
|
||||||
// We need to add the task namespace but ONLY if it hasn't been added by the default imports or using imports yet.
|
// We need to add the task namespace but ONLY if it hasn't been added by the default imports or using imports yet.
|
||||||
if(!defaultImports.Contains(taskNamespace) && !usingVisitor.ImportedUsings.Contains(taskNamespace))
|
if (!defaultImports.Contains(taskNamespace) && !usingVisitor.ImportedUsings.Contains(taskNamespace))
|
||||||
{
|
{
|
||||||
writer.WriteUsing(taskNamespace);
|
writer.WriteUsing(taskNamespace);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Microsoft.AspNet.Razor.Generator;
|
using Microsoft.AspNet.Razor.Generator;
|
||||||
using Microsoft.AspNet.Razor.Generator.Compiler;
|
using Microsoft.AspNet.Razor.Generator.Compiler;
|
||||||
|
|
@ -19,6 +22,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class RazorTemplateEngine
|
public class RazorTemplateEngine
|
||||||
{
|
{
|
||||||
|
private const int BufferSize = 1024;
|
||||||
public static readonly string DefaultClassName = "Template";
|
public static readonly string DefaultClassName = "Template";
|
||||||
public static readonly string DefaultNamespace = String.Empty;
|
public static readonly string DefaultNamespace = String.Empty;
|
||||||
|
|
||||||
|
|
@ -127,7 +131,12 @@ namespace Microsoft.AspNet.Razor
|
||||||
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Input object would be disposed if we dispose the wrapper. We don't own the input so we don't want to dispose it")]
|
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Input object would be disposed if we dispose the wrapper. We don't own the input so we don't want to dispose it")]
|
||||||
public GeneratorResults GenerateCode(ITextBuffer input, string className, string rootNamespace, string sourceFileName, CancellationToken? cancelToken)
|
public GeneratorResults GenerateCode(ITextBuffer input, string className, string rootNamespace, string sourceFileName, CancellationToken? cancelToken)
|
||||||
{
|
{
|
||||||
return GenerateCodeCore(input.ToDocument(), className, rootNamespace, sourceFileName, cancelToken);
|
return GenerateCodeCore(input.ToDocument(),
|
||||||
|
className,
|
||||||
|
rootNamespace,
|
||||||
|
sourceFileName,
|
||||||
|
checksum: null,
|
||||||
|
cancelToken: cancelToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
// See GenerateCode override which takes ITextBuffer, and BufferingTextReader for details.
|
// See GenerateCode override which takes ITextBuffer, and BufferingTextReader for details.
|
||||||
|
|
@ -146,13 +155,83 @@ namespace Microsoft.AspNet.Razor
|
||||||
return GenerateCode(input, className, rootNamespace, sourceFileName, null);
|
return GenerateCode(input, className, rootNamespace, sourceFileName, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parses the contents specified by the <paramref name="inputStream"/> and returns the generated code.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inputStream">A <see cref="Stream"/> that represents the contents to be parsed.</param>
|
||||||
|
/// <param name="className">The name of the generated class. When <c>null</c>, defaults to
|
||||||
|
/// <see cref="Host.DefaultClassName"/>.</param>
|
||||||
|
/// <param name="rootNamespace">The namespace in which the generated class will reside. When <c>null</c>,
|
||||||
|
/// defaults to <see cref="Host.DefaultNamespace"/>.</param>
|
||||||
|
/// <param name="sourceFileName">The file name to use in line pragmas, usually the original Razor file.</param>
|
||||||
|
/// <returns>A <see cref="GeneratorResults"/> that represents the results of parsing the content.</returns>
|
||||||
|
/// <remarks>
|
||||||
|
/// This overload calculates the checksum of the contents of <paramref name="inputStream"/> prior to code
|
||||||
|
/// generation. The checksum is used for producing the <c>#pragma checksum</c> line pragma required for
|
||||||
|
/// debugging.
|
||||||
|
/// </remarks>
|
||||||
|
public GeneratorResults GenerateCode([NotNull] Stream inputStream,
|
||||||
|
string className,
|
||||||
|
string rootNamespace,
|
||||||
|
string sourceFileName)
|
||||||
|
{
|
||||||
|
MemoryStream memoryStream = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!inputStream.CanSeek)
|
||||||
|
{
|
||||||
|
memoryStream = new MemoryStream();
|
||||||
|
inputStream.CopyTo(memoryStream);
|
||||||
|
|
||||||
|
// We don't have to dispose the input stream since it is owned externally.
|
||||||
|
inputStream = memoryStream;
|
||||||
|
}
|
||||||
|
|
||||||
|
inputStream.Position = 0;
|
||||||
|
var checksum = ComputeChecksum(inputStream);
|
||||||
|
inputStream.Position = 0;
|
||||||
|
|
||||||
|
using (var reader = new StreamReader(inputStream,
|
||||||
|
Encoding.UTF8,
|
||||||
|
detectEncodingFromByteOrderMarks: true,
|
||||||
|
bufferSize: BufferSize,
|
||||||
|
leaveOpen: true))
|
||||||
|
{
|
||||||
|
var seekableStream = new SeekableTextReader(reader);
|
||||||
|
return GenerateCodeCore(seekableStream,
|
||||||
|
className,
|
||||||
|
rootNamespace,
|
||||||
|
sourceFileName,
|
||||||
|
checksum,
|
||||||
|
cancelToken: null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (memoryStream != null)
|
||||||
|
{
|
||||||
|
memoryStream.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Input object would be disposed if we dispose the wrapper. We don't own the input so we don't want to dispose it")]
|
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "Input object would be disposed if we dispose the wrapper. We don't own the input so we don't want to dispose it")]
|
||||||
public GeneratorResults GenerateCode(TextReader input, string className, string rootNamespace, string sourceFileName, CancellationToken? cancelToken)
|
public GeneratorResults GenerateCode(TextReader input, string className, string rootNamespace, string sourceFileName, CancellationToken? cancelToken)
|
||||||
{
|
{
|
||||||
return GenerateCodeCore(new SeekableTextReader(input), className, rootNamespace, sourceFileName, cancelToken);
|
return GenerateCodeCore(new SeekableTextReader(input),
|
||||||
|
className,
|
||||||
|
rootNamespace,
|
||||||
|
sourceFileName,
|
||||||
|
checksum: null,
|
||||||
|
cancelToken: cancelToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected internal virtual GeneratorResults GenerateCodeCore(ITextDocument input, string className, string rootNamespace, string sourceFileName, CancellationToken? cancelToken)
|
protected internal virtual GeneratorResults GenerateCodeCore(ITextDocument input,
|
||||||
|
string className,
|
||||||
|
string rootNamespace,
|
||||||
|
string sourceFileName,
|
||||||
|
string checksum,
|
||||||
|
CancellationToken? cancelToken)
|
||||||
{
|
{
|
||||||
className = (className ?? Host.DefaultClassName) ?? DefaultClassName;
|
className = (className ?? Host.DefaultClassName) ?? DefaultClassName;
|
||||||
rootNamespace = (rootNamespace ?? Host.DefaultNamespace) ?? DefaultNamespace;
|
rootNamespace = (rootNamespace ?? Host.DefaultNamespace) ?? DefaultNamespace;
|
||||||
|
|
@ -167,7 +246,11 @@ namespace Microsoft.AspNet.Razor
|
||||||
generator.DesignTimeMode = Host.DesignTimeMode;
|
generator.DesignTimeMode = Host.DesignTimeMode;
|
||||||
generator.Visit(results);
|
generator.Visit(results);
|
||||||
|
|
||||||
var builder = CreateCodeBuilder(generator.Context);
|
|
||||||
|
var codeGenerationContext = generator.Context;
|
||||||
|
codeGenerationContext.Checksum = checksum;
|
||||||
|
|
||||||
|
var builder = CreateCodeBuilder(codeGenerationContext);
|
||||||
var builderResult = builder.Build();
|
var builderResult = builder.Build();
|
||||||
|
|
||||||
// Collect results and return
|
// Collect results and return
|
||||||
|
|
@ -194,8 +277,24 @@ namespace Microsoft.AspNet.Razor
|
||||||
|
|
||||||
protected internal virtual CodeBuilder CreateCodeBuilder(CodeGeneratorContext context)
|
protected internal virtual CodeBuilder CreateCodeBuilder(CodeGeneratorContext context)
|
||||||
{
|
{
|
||||||
return Host.DecorateCodeBuilder(Host.CodeLanguage.CreateCodeBuilder(context),
|
return Host.DecorateCodeBuilder(Host.CodeLanguage.CreateCodeBuilder(context),
|
||||||
context);
|
context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string ComputeChecksum(Stream inputStream)
|
||||||
|
{
|
||||||
|
byte[] hashedBytes;
|
||||||
|
using (var hashAlgorithm = SHA1.Create())
|
||||||
|
{
|
||||||
|
hashedBytes = hashAlgorithm.ComputeHash(inputStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
var fileHashBuilder = new StringBuilder(hashedBytes.Length * 2);
|
||||||
|
foreach (var value in hashedBytes)
|
||||||
|
{
|
||||||
|
fileHashBuilder.Append(value.ToString("x2"));
|
||||||
|
}
|
||||||
|
return fileHashBuilder.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,8 @@
|
||||||
"System.Runtime.InteropServices": "4.0.20.0",
|
"System.Runtime.InteropServices": "4.0.20.0",
|
||||||
"System.Threading": "4.0.0.0",
|
"System.Threading": "4.0.0.0",
|
||||||
"System.Threading.Tasks": "4.0.10.0",
|
"System.Threading.Tasks": "4.0.10.0",
|
||||||
"System.Threading.Thread": "4.0.0.0"
|
"System.Threading.Thread": "4.0.0.0",
|
||||||
|
"System.Security.Cryptography.Hashing.Algorithms": "4.0.0.0"
|
||||||
},
|
},
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
"net45": { },
|
"net45": { },
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
baselineName = name;
|
baselineName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
string sourceLocation = string.Format("/CodeGenerator/{1}/Source/{0}.{2}", name, LanguageName, FileExtension);
|
string sourceLocation = string.Format("TestFiles/CodeGenerator/{1}/Source/{0}.{2}", name, LanguageName, FileExtension);
|
||||||
string source = TestFile.Create(string.Format("TestFiles/CodeGenerator/CS/Source/{0}.{1}", name, FileExtension)).ReadAllText();
|
|
||||||
string expectedOutput = TestFile.Create(string.Format("TestFiles/CodeGenerator/CS/Output/{0}.{1}", baselineName, BaselineExtension)).ReadAllText();
|
string expectedOutput = TestFile.Create(string.Format("TestFiles/CodeGenerator/CS/Output/{0}.{1}", baselineName, BaselineExtension)).ReadAllText();
|
||||||
|
|
||||||
// Set up the host and engine
|
// Set up the host and engine
|
||||||
|
|
@ -136,11 +135,11 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
|
|
||||||
// Generate code for the file
|
// Generate code for the file
|
||||||
GeneratorResults results = null;
|
GeneratorResults results = null;
|
||||||
using (StringTextBuffer buffer = new StringTextBuffer(source))
|
using (var source = TestFile.Create(sourceLocation).OpenRead())
|
||||||
{
|
{
|
||||||
results = engine.GenerateCode(buffer, className: name, rootNamespace: TestRootNamespaceName, sourceFileName: generatePragmas ? String.Format("{0}.{1}", name, FileExtension) : null);
|
var sourceFileName = generatePragmas ? String.Format("{0}.{1}", name, FileExtension) : null;
|
||||||
|
results = engine.GenerateCode(source, className: name, rootNamespace: TestRootNamespaceName, sourceFileName: sourceFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only called if GENERATE_BASELINES is set, otherwise compiled out.
|
// Only called if GENERATE_BASELINES is set, otherwise compiled out.
|
||||||
BaselineWriter.WriteBaseline(String.Format(@"test\Microsoft.AspNet.Razor.Test\TestFiles\CodeGenerator\{0}\Output\{1}.{2}", LanguageName, baselineName, BaselineExtension), results.GeneratedCode);
|
BaselineWriter.WriteBaseline(String.Format(@"test\Microsoft.AspNet.Razor.Test\TestFiles\CodeGenerator\{0}\Output\{1}.{2}", LanguageName, baselineName, BaselineExtension), results.GeneratedCode);
|
||||||
|
|
||||||
|
|
@ -179,7 +178,7 @@ namespace Microsoft.AspNet.Razor.Test.Generator
|
||||||
|
|
||||||
for (var i = 0; i < expectedDesignTimePragmas.Count; i++)
|
for (var i = 0; i < expectedDesignTimePragmas.Count; i++)
|
||||||
{
|
{
|
||||||
if(!expectedDesignTimePragmas[i].Equals(results.DesignTimeLineMappings[i]))
|
if (!expectedDesignTimePragmas[i].Equals(results.DesignTimeLineMappings[i]))
|
||||||
{
|
{
|
||||||
Assert.True(false, String.Format("Line mapping {0} is not equivalent.", i));
|
Assert.True(false, String.Format("Line mapping {0} is not equivalent.", i));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Web.WebPages.TestUtils;
|
using System.Web.WebPages.TestUtils;
|
||||||
using Microsoft.AspNet.Razor.Generator;
|
using Microsoft.AspNet.Razor.Generator;
|
||||||
|
|
@ -10,6 +12,7 @@ using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
|
||||||
using Microsoft.AspNet.Razor.Parser;
|
using Microsoft.AspNet.Razor.Parser;
|
||||||
using Microsoft.AspNet.Razor.Text;
|
using Microsoft.AspNet.Razor.Text;
|
||||||
using Moq;
|
using Moq;
|
||||||
|
using Moq.Protected;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Razor.Test
|
namespace Microsoft.AspNet.Razor.Test
|
||||||
|
|
@ -161,7 +164,7 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
mockEngine.Verify(e => e.GenerateCodeCore(It.Is<SeekableTextReader>(l => l.ReadToEnd() == "foo"),
|
mockEngine.Verify(e => e.GenerateCodeCore(It.Is<SeekableTextReader>(l => l.ReadToEnd() == "foo"),
|
||||||
className, ns, src, source.Token));
|
className, ns, src, null, source.Token));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -212,6 +215,42 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
Assert.NotNull(results.DesignTimeLineMappings);
|
Assert.NotNull(results.DesignTimeLineMappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<object[]> GenerateCodeCalculatesLinePragma_IfStreamInputIsUsedData
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// Seekable stream
|
||||||
|
var content = Encoding.UTF8.GetBytes("Hello world");
|
||||||
|
var stream = new MemoryStream(content);
|
||||||
|
|
||||||
|
yield return new[] { stream };
|
||||||
|
|
||||||
|
// Non seekable stream
|
||||||
|
var mockStream = new Mock<MemoryStream>(content)
|
||||||
|
{
|
||||||
|
CallBase = true
|
||||||
|
};
|
||||||
|
mockStream.Setup(m => m.CanSeek)
|
||||||
|
.Returns(false);
|
||||||
|
|
||||||
|
yield return new[] { mockStream.Object };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[MemberData(nameof(GenerateCodeCalculatesLinePragma_IfStreamInputIsUsedData))]
|
||||||
|
public void GenerateCodeCalculatesLinePragma_IfStreamInputIsUsed(Stream stream)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var engine = new TestableRazorTemplateEngine();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var results = engine.GenerateCode(stream, "some-class", "some-ns", "foo.cshtml");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal("7b502c3a1f48c8609ae212cdfb639dee39673f5e", engine.Checksum);
|
||||||
|
}
|
||||||
|
|
||||||
private static RazorEngineHost CreateHost(bool designTime = false)
|
private static RazorEngineHost CreateHost(bool designTime = false)
|
||||||
{
|
{
|
||||||
return new RazorEngineHost(new CSharpRazorCodeLanguage())
|
return new RazorEngineHost(new CSharpRazorCodeLanguage())
|
||||||
|
|
@ -219,5 +258,27 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
DesignTimeMode = designTime
|
DesignTimeMode = designTime
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class TestableRazorTemplateEngine : RazorTemplateEngine
|
||||||
|
{
|
||||||
|
public TestableRazorTemplateEngine()
|
||||||
|
: base(CreateHost())
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Checksum { get; set; }
|
||||||
|
|
||||||
|
protected internal override GeneratorResults GenerateCodeCore(ITextDocument input,
|
||||||
|
string className,
|
||||||
|
string rootNamespace,
|
||||||
|
string sourceFileName,
|
||||||
|
string checksum,
|
||||||
|
CancellationToken? cancelToken)
|
||||||
|
{
|
||||||
|
Checksum = checksum;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Await.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5a02c3ec89081f6e0a8f4810e127eed40467c358"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Blocks.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "ed55fda2b7b0b96b044fc45da658dc062479924f"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "CodeBlock.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "d570564dcb19afbfb9fcd1b8a7e339d22c0d0c97"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "ConditionalAttributes.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "f0a97e23ecfbaaaa77b528650156cb123ebdbe60"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "ExplicitExpression.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "0fa6894c606c7426da1d8cacfbacf8be971c777f"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "ExpressionsInCode.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "3ccb5b16f61b84dd82d7402e4a17870a39d09ca9"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "FunctionsBlock.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "e6a053bfeb65ba3e17885a8ae1523f28a3483258"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "FunctionsBlock_Tabs.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "93dd195557fe9c2e5a15b75d76608f2cb7082f3f"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Helpers.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "228b0ea0de0f06806d10a9768bb4afd7e0ecb878"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Helpers.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "228b0ea0de0f06806d10a9768bb4afd7e0ecb878"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "HelpersMissingCloseParen.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "a59fed8a1d7b5333e081339188fe2dba59c71e41"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "HelpersMissingOpenBrace.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "f81212c85e39fa08cb4c95e2339817caa725397c"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "HelpersMissingOpenParen.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "dc407d9349ea9a1595c65660d41a63970de65729"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "HtmlCommentWithQuote_Double.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "520aebbcdbdb163b131356be8f3aef0eb0809c47"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "HtmlCommentWithQuote_Single.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "2080c7f4c5de3e5e7f309c11a6be5c5e8d86e75a"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "ImplicitExpression.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "68460c577f1cb90794f25535a35a82ff2aa4c193"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Imports.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "6e81e2fa106d657a3f2e198f0c687cb19b2f7e9e"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
#line 1 "Imports.cshtml"
|
#line 1 "Imports.cshtml"
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Inherits.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "b9264c58289dbea68e46a818fd0c4c4d835b3a84"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "InlineBlocks.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "85fc1bd0306a5a6164d3d866bd690ff95cba0a8e"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Instrumented.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "24ae301f33f984680e86aa6c7ae226809531ffe9"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "LayoutDirective.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "936a0ebedd8d855480541640e61dacbb8b0e56c0"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "MarkupInCodeBlock.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "539d5763b7091d29df375085f623b9086e7f8ad6"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "NestedCodeBlocks.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "d83923f86f1c84f081916ef7308513ab80a65675"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "NestedHelpers.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "e8232b2b30af7dadb0698abf8ba08851f401963d"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "c6fa3992fa56644768995c97941d682d90f6d8ec"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "RazorComments.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "051345e2cc0313fea445db2f6cf48fe28b0b4edf"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "ResolveUrl.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "ef2ca9797f9fbd9788685830524a0daacb2a30e8"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Sections.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "0bd579cc5b9e6bd12b720003df47899d0a0207cf"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#pragma checksum "Templates.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "3a6da4fcc3d9b28618d5703e4925d45491b5a013"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue