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

时间:2017-02-07 14:04:44

标签: c# asp.net-mvc razor asp.net-core .net-core

this question之后,我现在在我的asp.net核心应用程序中设置了预编译的视图,该应用程序使用

从命令行编译DLL
  

dotnet razor-precompile

命令。然后我使用

将其打包为nuget包
  

dotnet pack

并添加了包作为项目的引用,我已从中删除了视图。 然后我创建了一个实现myprogressview()的新类,并在我的项目的 var count : Int = 0 func myprogressview(timer : Timer) { count += 1 if (count <= 10) { print(count*10) progress.progress = Float(count)/10.0 progressLable.text = String.init(format: "%d %%", count*10) } else { timer.invalidate() } } 方法中进行设置,我可以看到它在我的新位置搜索视图。但是,我不知道要把什么作为预编译视图的搜索路径,因为那里没有.cshtml文件。我只是得到一个IViewLocationExpander,但找不到视图。

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

由于

1 个答案:

答案 0 :(得分:2)

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

我刚刚在我的主项目中注册了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。

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