2017-02-07 1 views
4

Следующее из this question, я теперь настроил предварительно скомпилированные представления в моем основном приложении asp.net, которое компилируется в DLL из командной строки, используяДоступ к предварительно скомпилированным представлениям в ядре asp.net из другого проекта/сборки

DotNet бритва прекомпиляция команда

. Я затем упаковывают его в качестве NuGet пакета с использованием

Dotnet пакет

и добавил пакет в качестве ссылки на проект я удалил точку с. Я создал новый класс, который реализует IViewLocationExpander и устанавливает его в методе setup.cs моего проекта, и я вижу, как он просматривает мое новое местоположение для просмотров. Тем не менее, я не знаю, как поставить путь поиска для предварительно скомпилированного представления, так как там нет файлов .cshtml. Я просто получаю InvalidOperationException, вид не найден.

Кто-нибудь сделал это раньше или может предложить, как я могу добавить эти предварительно скомпилированные виды в путь поиска?

Благодаря

+1

Вы нашли решение на этом? –

+0

** Bounty Info: ** Я использую net core 2.0. –

+0

** [Это] (https://www.codeproject.com/Articles/1169354/Pre-compiled-Razor-View-in-ASP-NET-MVC) ** может вам помочь. Я сделал это еще в 2011 или 2012 году, но у меня нет ответа. – Nilesh

ответ

1

Я был поражен, он непосредственно работал так:

Я только что зарегистрировался в мой основной проект в 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 моего ot ее проект, который содержит Test/Test.cshtml.

И воела, каждая страница в моем основном приложении показывала этот.

+0

Мне нужно использовать _Layout.cshtml из одного проекта * .PrecompiledViews.dll в другом проекте. Это выполнимо? – HKK

Смежные вопросы