红隼与IIS - 运行时缺少libuv.dll

Sco*_*y H 17 c# asp.net asp.net-web-api kestrel-http-server

我们正在设置现有的Web API服务器,以便与现有API一起提供站点.我一直在松散地阅读这篇文章.

这是我的Global.asax.cs的样子:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        AutoMapperConfig.RegisterMappings();

        var host = new WebHostBuilder()
           .UseKestrel()
           .UseWebRoot("wwwroot")
           .UseIISIntegration()
           .UseStartup<Startup>()
           .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

和Startup.cs:

public partial class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行项目时,我收到错误

无法加载DLL"libuv":找不到指定的模块.(来自HRESULT的异常:0x8007007E)

libuv是Kestrel的依赖.如果我手动将它从packages文件夹复制到bin文件夹,它可以工作.这个GitHub问题评论似乎有意义.现在project.json正在被移走,我怎样才能让它自动复制?

有些人认为它不知道是否使用32位或64位版本的libuv,因为平台在项目属性中设置为Any CPU.我已尝试在解决方案和项目设置中将其设置为x64,问题仍然存在.

如何自动将libuv.dll直接复制到构建目录?

我不考虑在项目中包含该文件(而不是在packages文件夹中)并将其设置为复制到输出目录的真正解决方案,只是一种解决方法.我希望找到解决方案,而不是解决方法.

Sve*_*vek 11

我在迁移项目之前遇到过类似的问题.Visual Studio可能会因项目不匹配而行为不端.

简单回答:您需要将项目更改为MSBuild/csproj格式.

首先,如果您尝试在解决方案中使用.NET Core,请在Visual Studio中右键单击您的项目,如果您没有看到,Edit xxxxxx.csproj那么您可能会遇到类似于您的问题报道如上.

基本上,.NET Core项目模板在编译项目时使用不同的工具.

下面的解决方案是一种通用方法,可以解决几乎所有与尝试以.NET Core为目标的项目相关的问题,但希望使用其他框架中的库.到目前为止,还没有一个很好的工具来解决这个问题,所以你将不得不采用手动模式.


让我们开始吧.

解决方案非常简单(但有点单调乏味).

第1步:使用新的MSBuild/csproj格式创建一个新项目

创建一个新项目,然后选择".NET Core".

步骤1

几乎在所有情况下,您可能都希望避免使用ASP.NET核心Web应用程序模板,但这可以用于另一个讨论.

第2步:定位正确的框架

右键单击该项目并选择 Edit xxxxxx.csproj

<PropertyGroup>
    <TargetFramework>net452</TargetFramework>
    <!--you will also probably want to note that you need these for a console app -->
    <OutputType>Exe</OutputType>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

选择一个您想要定位的框架,并确保它是受支持的(这是一个表格).
net452在上面的代码片段中使用了一个例子.您可以在此处找到有关命名的更多信息.

第2步

第3步.对所有项目重复.

您将不得不为解决方案中的每个项目执行此操作,以防止Visual Studio出现意外行为.

关于如何让ASP.NET Core与旧框架配合良好,网上真的没什么用.希望这会帮助你.我希望我早些时候对自己有这个建议.