Запуск хостинга AspNetCore из приложения.NET Framework
Итак, у меня есть приложение.NET 4.6.1, которое работает как служба Windows с использованием Topshelf, и у меня также есть веб-приложение ASP.NET Core (MVC и API), которое в настоящее время работает как служба и размещает себя в собственном процессе, используя Microsoft.AspNetCore.Hosting
а также Microsoft.AspNetCore.Hosting.WindowsServices
, Чего я хочу добиться, так это того, что я могу запустить хостинг AspNetCore из приложения.NET, поэтому у меня есть только один процесс.
Тем не менее, когда я пытаюсь использовать этот код:
bool isService = true;
if(Debugger.IsAttached || args.Contains("--console"))
{
isService = false;
}
var pathToContentRoot = Directory.GetCurrentDirectory();
if(isService)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
pathToContentRoot = Path.GetDirectoryName(pathToExe);
}
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(pathToContentRoot)
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
Я получаю много ошибок. Сначала я подумал, что это из-за использования различных целевых платформ.net, но даже после настройки на 4.6.1 и обновления ядерных нативов asp.net до последних версий все равно выдает эти ошибки (Это похоже на 1/30 оригинальной длины ошибок):
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException: One or more compilation failures occurred:
imlmfapg.yxl(4,41): error CS0234: The type or namespace name 'Razor' does not exist in the namespace 'Microsoft.AspNetCore' (are you missing an assembly reference?)
imlmfapg.yxl(5,62): error CS0012: The type 'Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
imlmfapg.yxl(4,82): error CS0518: Predefined type 'System.Type' is not defined or imported
imlmfapg.yxl(4,118): error CS0518: Predefined type 'System.String' is not defined or imported
imlmfapg.yxl(4,135): error CS0518: Predefined type 'System.String' is not defined or imported
imlmfapg.yxl(5,81): error CS0518: Predefined type 'System.String' is not defined or imported
imlmfapg.yxl(5,109): error CS0518: Predefined type 'System.Type' is not defined or imported
imlmfapg.yxl(5,11): error CS0518: Predefined type 'System.Void' is not defined or imported
imlmfapg.yxl(9,11): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
imlmfapg.yxl(10,11): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
imlmfapg.yxl(11,11): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
imlmfapg.yxl(12,11): error CS0246: The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?)
imlmfapg.yxl(15,36): error CS0234: The type or namespace name 'ViewFeatures' does not exist in the namespace 'Microsoft.AspNetCore.Mvc' (are you missing an assembly reference?)
imlmfapg.yxl(26,35): error CS0234: The type or namespace name 'Razor' does not exist in the namespace 'Microsoft.AspNetCore' (are you missing an assembly reference?)
imlmfapg.yxl(27,35): error CS0234: The type or namespace name 'Razor' does not exist in the namespace 'Microsoft.AspNetCore' (are you missing an assembly reference?)
ОБНОВИТЬ:
Так что для всех, кто пытается сделать то, что я сделал, разместив веб-проект вне консольного проекта (оба ориентированы на.NET FW 4.6.1). Похоже, причина, по которой это не работает, заключается в том, что во время компиляции, когда ASP пытается визуализировать страницы, используя бритву, он не может правильно определить пространства имен и, следовательно, не может найти нужные библиотеки DLL для использования. Другой способ работает хорошо, хотя. Просто запустив другие функциональные возможности основного проекта aspnet с консолью и собственным хостингом.
1 ответ
Может быть, попробуйте добавить ссылку netstandard в web.config следующим образом:
<system.web>
<compilation debug="true" targetFramework="4.7.1" > <assemblies> <add `assembly="netstandard, Version=2.0.0.0, Culture=neutral,` PublicKeyToken=cc7b13ffcd2ddd51"/> </assemblies> </compilation> <httpRuntime targetFramework="4.7.1" />