Ядро asp.net mvc не найдено при запуске через отражения - PullRequest
0 голосов
/ 30 декабря 2018

Я использую asp.net core mvc-приложение на основе .NET 4.7.Когда я запускаю сгенерированный пример приложения, все работает хорошо.

Но у меня есть приложение большего размера с поддержкой плагинов, и я хочу использовать asp.net mvc в качестве одного из моих плагинов.

Плагинывстроенная загрузка сборки из файла dll и вызов метода Start () для запуска плагина.

Когда я добавляю стартовый код asp.net в этот метод, веб-приложение запускается по любому запросу, который я получаюошибка:

Connection id "0HLJE77KODDC8", Request id "0HLJE77KODDC8:00000001": An unhandled exception was thrown by the application.
System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
   bei Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable`1 originalLocations)
   bei Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.<ExecuteAsync>d__6.MoveNext()

Но я знаю, что Index.cshtml существует.

Я запускаю приложение asp.net с

 CreateWebHostBuilder(new string[] { }).UseContentRoot(myWebBinPath).Build().Run();

из метода, вызываемого через отражение.Все ссылки на dll на ассемблере разрешены хорошо, но мне нужно установить дополнительный путь, когда я вызываю CreateWebHostBuilder из другого контекста приложения (например, Environemt CurrentDirectory ...)

Я не знаю, где ищет каркасэто представления, поэтому я не могу настроить путь к файлу ...

, пожалуйста, помогите мне:)

1 Ответ

0 голосов
/ 30 декабря 2018

Я получил это:

ASP.NET хочет действительный путь AppDomain.CurrentDomain.BaseDirectory к каталогу bin asp.net.

Поэтому мне нужно создать новый домен AppDomain для отдельных частеймое приложение.

В моем тестовом сценарии оно работает, когда я принудительно обновляю AppBase Path:

  AppDomain.CurrentDomain.SetData("APPBASE", @"D:\...\HomeDataManagement.Plugin.Service.Web\bin\Debug\net461\");

Тогда среда приложения такая же, как при запуске автономного exe-файла, поэтому я могу вызвать WebBuilderбез contentRoot путь:

    CreateWebHostBuilder(new string[] { }).Build().Run();
...