【发布时间】:2023-01-30 18:39:43
【问题描述】:
我正在尝试使用包从代码生成 g.cs
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.5" />
将razor编译成cs的示例代码:
var engine = RazorProjectEngine.Create(RazorConfiguration.Default, RazorProjectFileSystem.Create(pathWhereCsProjLives));
var file = engine.FileSystem.GetItem("/pages/Counter2.razor");
var document = engine.Process(file).GetCSharpDocument();
var generatedCode = document.GeneratedCode;
它不能正常工作。例如,将生成一个按钮,如下所示:
__builder.AddMarkupContent(5, "<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>");
应该是这样的:
__builder.OpenElement(5, "button");
__builder.AddAttribute(6, "class", "btn btn-primary");
__builder.AddAttribute(7, "onclick", Microsoft.AspNetCore.Components.EventCallback.Factory.Create<Microsoft.AspNetCore.Components.Web.MouseEventArgs>(this, IncrementCount
));
__builder.AddContent(8, "Click me");
__builder.CloseElement();
}
【问题讨论】:
-
尽管名称相似,但 Blazor 和 Razor 是截然不同的技术。此处使用的 Razor(以及
Microsoft.AspNetCore.Razor.Language使用的)是关于服务器端生成 HTML 内容然后发送到客户端的。 Blazor 通常是关于在客户端生成 HTML(在 Web 程序集变体中表现得最清楚和明显)。 Blazor 功能主要可以在Microsoft.AspNetCore.Components命名空间中找到。考虑到所有这些,您应该解释您实际想要完成的事情,因为您当前的方法行不通。 -
在设计器上工作,用户可以使用实时预览编写 blazor 组件(热重载目前有很多限制)。基本上我想创建 Microsoft.NET.Sdk.Razor.SourceGenerators 所做的 g.cs。 file.razor -> file.g.cs。或者如果有一种方法可以在运行时采用剃刀组件并创建类型,那就更好了。
-
你能做到吗?我正在努力完成同样的事情
-
不!当前的解决方案是为整个项目调用 dotnet build,我讨厌它。
标签: razor blazor code-generation