Запуск хостинга AspNetCore из приложения .NET Framework - PullRequest
0 голосов
/ 07 июня 2018

Итак, у меня есть приложение .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 Ответ

0 голосов
/ 09 июня 2018

Возможно, попробуйте добавить ссылку на нестандартную ссылку в 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" />
...