Система.DllNotFoundException: не удается загрузить DLL ‘libuv’ при публикации веб-сайта .NET Core в Windows Server 2008 R2

#asp.net-core #asp.net-core-mvc #.net-core #asp.net-core-1.0 #libuv

#asp.net-core #asp.net-core-mvc #.net-core #asp.net-core-1.0 #libuv

Вопрос:

Я получаю сообщение об ошибке при публикации моего .NET Core Asp.NET Веб-приложение на Windows Server 2008 R2. Это связано с libuv:

 Unhandled Exception: System.AggregateException: One or more errors occurred. ---> System.DllNotFoundException: Unable to load DLL 'libuv': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.NativeMethods.uv_loop_size()
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.loop_size()
at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle.Init(Libuv uv)
at Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread.ThreadStart(Object parameter)
  

Странно то, что когда я публикую локально на своем компьютере для разработки, я вижу libuv.dll в папке публикации. И приложение работает на моем локальном компьютере через IIS.

project.json framework:

 "frameworks": {
  "net461": {}
},
  

Используя эти команды:

 dotnet restore
dotnet build
dotnet publish --configuration Release  --runtime active
  

Есть идеи, как я могу это исправить?

Комментарии:

1. используете ли вы окончательную версию asp.net-core? Швы, подобные этой проблеме, были исправлены в выпуске RC2 — github.com/aspnet/KestrelHttpServer/issues/627

2. Проблема с этим вопросом заключается в том, что заголовок заявляет, что он предназначен для core, но файл project.json показывает иное.

Ответ №1:

Я нашел причину этой ошибки, по крайней мере, то, что вызывало ее в моем случае сейчас, 10 месяцев спустя.

У меня был более старый проект web-api, созданный с помощью .net core 1.1, и в *.csproj файле было найдено следующее PropertyGroup :

   <PropertyGroup>
    <TargetFramework>net47</TargetFramework>
    <RuntimeIdentifier>win7-x86</RuntimeIdentifier>
  </PropertyGroup>
  

В более новом проекте, который я создал несколько дней назад, но с более новым шаблоном и .NET Core 2.0, это выглядело так:

   <PropertyGroup>
    <TargetFramework>net47</TargetFramework>
  </PropertyGroup>
  

Здесь RuntimeIdentifier отсутствовал. Я добавил его в новый проект, и ошибка исчезла. Теперь сервер запускается, как и ожидалось.

Ответ №2:

У меня была такая же проблема. Я решаю эту проблему, удаляя эти строки из csproj

   </ItemGroup>
  <ItemGroup Condition="'$(TargetFramework)' == 'net461'">
    <Reference Include="System.ServiceModel" />
  </ItemGroup>