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