gpt4 book ai didi

c# - 更改 RazorViewEngine 以在特定项目 (.Net Core) 中查找 View

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:29 27 4
gpt4 key购买 nike

我有一个带有电子邮件项目的应用程序,它公开了一个类来使用 IRazorViewEngine 编译电子邮件模板,并发送它。

但是,这用于几个不同的项目,默认情况下 RazorViewEngine 似乎只在 Views 文件夹中查找相关 Web 项目。这意味着我必须跨项目复制相同的 View 。

我研究过扩展 RazorViewEngine 以修改它查找 View 的位置,但是每个示例都会更改它查找的项目中的哪个文件夹,而不是哪个项目,并且快速查看 RazorViewEngine source 它明确期望应用程序本地路径(即以“~”或“/”开头),阻止了我天真的尝试使用绝对路径或以“../”开头的路径。

有没有办法确保 RazorViewEngine(或子类)检查特定(非动态)项目,而不是调用它的 Web 项目?

应用程序正在使用 .Net Core 1.1,RazorEngine 似乎不支持

最佳答案

我在让 RazorLight 工作时遇到了一些麻烦,所以我认为我最好在此处发布我的解决方案。我使用以下 .csproj 更改将 .cshtml 文件嵌入到程序集中

<ItemGroup>
<EmbeddedResource Include="Emails/*.cshtml" />
<Content Include="Emails/*.cshtml">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>

然后,我在与模板相同的文件夹中包含一个空类 (FakeClass),并像这样使用 RazorLight EngineFactory

var engine = EngineFactory.CreateEmbedded(typeof(FakeClass));
return engine.Parse(name, model);

由于不查看源代码我无法理解的原因,CreateEmbedded 需要一个与 View 位于同一位置的类,否则在查找 View 时会出错。

名称只是没有扩展名的模板名称,模型是您的强类型模型。

这种方法的优点是无需弄乱路径字符串,并且可以将所有内容很好地包含在一个项目中。

关于c# - 更改 RazorViewEngine 以在特定项目 (.Net Core) 中查找 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44263642/

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