c# – 从另一个项目/程序集访问asp.net核心中的预编译视图


this question之后,我现在已经在我的asp.net核心应用程序中设置了预编译视图,该应用程序正在使用命令行从命令行编译DLL.

dotnet razor-precompile

命令.然后我将其打包为nuget包使用

dotnet pack

并添加了包作为项目的参考我删除了视图.
然后我创建了一个实现IViewLocationExpander的新类,并在我的项目的setup.cs方法中设置它,我可以看到它在我的新位置搜索视图.但是,我不知道要把什么作为预编译视图的搜索路径,因为那里没有.cshtml文件.我只是得到一个未找到视图的InvalidOperationException.

有没有人之前做过这个或能够建议我如何将这些预编译的视图添加到搜索路径?

谢谢

最佳答案 我很惊讶,它直接以这种方式工作:

我刚注册到我的主项目custom ViewExpander

services.AddMvc().AddRazorOptions(options =>
{
    options.ViewLocationExpanders.Clear();
    options.ViewLocationExpanders.Add(new TestViewLocationExpander());
};

扩展器本身:

public class TestViewLocationExpander : IViewLocationExpander
{
    public void PopulateValues(ViewLocationExpanderContext context)
    {
    }

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }
        if (viewLocations == null)
        {
            throw new ArgumentNullException(nameof(viewLocations));
        }

        yield return "~/Test/Test.cshtml";
    }
}

然后我引用了我的另一个项目的* .PrecompiledViews.dll,其中包含一个Test / Test.cshtml.

瞧,我主要应用程序中的每一页都显示了这一页.

点赞