我正在研究ASP4 / MVC4应用程序到ASP5 / MVC6的迁移策略。我们当前的实现依赖于将cshtml视图作为DLL的嵌入资源加载,我们使用VirtualPathProvider来查找这些cshtml文件。
不幸的是,HostingEnvironment.RegisterVirtualPathProvider似乎已经从MVC6中消失了。我能找到的最接近的是IEnvironment.WebRootFileProvider,它是一个IFileProvider。所以我编写了一个测试类来查看它是否可行,不幸的是,我编写的IFileProvider永远不会查询CSHTML文件。我收到所有.JS,.CSS等文件的请求,但没有.CSHTML的请求。
我在这里寻找的是能够在请求视图时挂钩剃刀引擎并提供从嵌入式资源(或实际上,任何其他来源)加载的CSHTML文件。我应该在这看什么?
谢谢!
答案 0 :(得分:5)
好吧,我通过在源代码中挖掘来解决这个问题。我可以通过覆盖Razor View Engine选项类上的文件提供程序来从任何地方加载视图:
services.AddMvc().AddRazorOptions(x => x.FileProvider = new EmbeddedFileProvider(typeof(Startup).Assembly));
现在唯一的问题是,似乎没有办法通过Visual Studio将资源嵌入到ASP.NET 5 DLL中......