【发布时间】:2018-11-30 17:18:21
【问题描述】:
我正在尝试使用新的 Razor SDK 将我的视图包含在我的类库中,其中每个类库都是一个 MVC 区域。如果我在类库中包含带有区域目录的视图,例如
/MyLibrary/Areas/MyLibrary/Views/Home/Index.cshtml
然后它加载正常。但是我不喜欢我必须将它们放在区域目录中,理想情况下路径是:
/MyLibrary/Views/Home/Index.cshtml
我猜我必须使用视图位置扩展器来实现这一点。但是,对于包含在类库中而不是在应用程序中的视图,我不知道如何实现这一点。到目前为止,我想出了:
public class AreaViewLocationExpander : IViewLocationExpander {
public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) {
return viewLocations.Concat(new[] {
"../{2}/Views/{1}/{0}" + RazorViewEngine.ViewExtension
});
}
public virtual void PopulateValues(ViewLocationExpanderContext context) { }
}
这会引发错误:
InvalidOperationException:未找到视图“索引”。这 搜索了以下位置:
/Areas/MyLibrary/Views/Home/Index.cshtml
/Areas/MyLibrary/Views/Shared/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
/../MyLibrary/Views/Home/Index.cshtml
但我想即使它在本地工作,它也不会在生产中或当库被打包在 NuGet 包中时。
如果有人能告诉我如何实现这一点,我将不胜感激。谢谢
【问题讨论】:
-
很好奇。你为什么要升一级才能进入你的图书馆?
-
我假设路径将从应用程序根目录开始。类库与应用程序位于同一目录中,因此我必须上一个目录才能找到它。我认为这至少在开发过程中会起作用。
-
编译时引用的库将在 bin 中。
-
看看这个看看能不能修改查看davepaquette.com/archive/2016/07/16/…
-
是的,我知道,但我需要使用不同的路径在 dll 中加载视图。
标签: asp.net-mvc razor asp.net-core asp.net-core-mvc