gpt4 book ai didi

c# - Razor ViewEngine 临时编译.cs文件

转载 作者:行者123 更新时间:2023-11-30 14:15:54 30 4
gpt4 key购买 nike

在 Razor ViewEngine 中调用 Parse 方法时,编译错误将作为包含错误列表的 TemplateComplilationException 抛出。这些错误涉及临时文件名,但文件在您可以访问它们之前已被删除。

static void Main(string[] args)  
{
var service = TemplateServiceFactory.CreateTemplateService(Language.CSharp, true);
string result = "";
try
{
result = service.Parse("Hello @DateTime.NowXX ");
}
catch (TemplateCompilationException ex)
{
foreach (var error in ex.Errors)
if (!string.IsNullOrEmpty(error.FileName))
Console.WriteLine( File.ReadAllText( error.FileName ));
} // ^^^^ File does not exist!

Console.WriteLine( result );
Console.ReadKey();
}

(一点背景)我在没有 MVC 的情况下“独立”使用 Razor 引擎。当我调用 Parse 时,我想获得尽可能多的详细信息以显示给用户。

最佳答案

当前的 v2.1 版本不提供吐出源代码的功能。新的 v3 代码库中有一个调试功能,允许源代码被推出。默认情况下它不会这样做,因为我试图使代码尽可能高效(并且生成代码两次(一次作为 CodeDom,一次作为字符串)并不理想)。您需要在配置中启用 Debug 标志:

var config = new TemplateServiceConfiguration { Debug = true };
var service = new TemplateService(config);

这将使抛出异常时能够读取源代码。

兴趣点,通过使用 v3 代码库测试 Roslyn 编译器基础结构,它接受字符串源而不是 CodeDom,因此我可能会在未来进行更改以直接使用它而不是 CodeDom - 这反过来意味着我们有直接访问源代码,而不必担心启用任何可能会被弃用的 Debug 标志。

v3(当前为 v3.0.7beta)在 Nuget 上可用(Install-Package RazorEngine)。上周末我的目标是 RTW,但一直没来得及实现。

关于c# - Razor ViewEngine 临时编译.cs文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851977/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com