ASPNet Core 2.1 правильный способ загрузки предварительно скомпилированных представлений - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь добавить функциональность, подобную плагину, в мое приложение, и мне трудно найти предварительно скомпилированные представления. Допустим, у меня есть библиотека классов Razor, которая скомпилирована в plugin.dll и plugin.views.dll Я успешно загружаю и добавляю plugin.dll

Assembly PLUGIN_ASSEMBLY = null;
                            try
                            {
                                PLUGIN_ASSEMBLY = Assembly.LoadFile(PLUGIN.PluginFileName);
                                Assembly.LoadFile(PLUGIN.PluginViewsFileName);
                            }
                            catch (FileLoadException)
                            {
                                throw;
                            } 

Затем сборка добавляется с помощью

MVC_BUILDER.AddApplicationPart(PLUGIN_ASSEMBLY);

Затем я добавляю базовый путь к плагину, чтобы были открыты его нормальные виды

MVC_BUILDER.AddRazorOptions(o =>
                        {
                            IFileProvider physicalProvider = new PhysicalFileProvider(PLUGIN.BasePath);
                            IFileProvider compositeProvider = new CompositeFileProvider(physicalProvider);
                            o.FileProviders.Add(compositeProvider);
                        });

Все вышеперечисленное работает нормально, за исключением того, что я могу использовать только физически расположенные виды, а не те, что на plugin.views.dll

Каков будет правильный подход к добавлению views.dll и созданию обнаруженных представлений?

1 Ответ

0 голосов
/ 19 октября 2018

Я потратил весь день, чтобы заставить это работать .. и это сработало.

В веб-приложении бритва знала, откуда брать предварительно скомпилированные представления, но в консольном приложении этого не происходит (возможно, это моя вина). Давайте поможем ему:)

Для начала нам нужно имя сборки с представлениями:

var viewAssembly = PLUGIN_ASSEMBLY.GetName().Name + ".Views";

Во-вторых, мы должны создать провайдера, который будет извлекать все скомпилированные представления из сборки:

var viewAssemblyPart = new CompiledRazorAssemblyPart(viewAssembly);

И последнее, но не менее важное: добавьте его в коллекцию других провайдеров:

MVC_BUILDER.PartManager.ApplicationParts.Add(viewAssemblyPart);

Наслаждайтесь!

Отдельное спасибо источникам из github:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...