c# - without - kestrel webserver




Kestrel mit IIS-libuv.dll fehlt beim Ausführen (2)

Wir richten einen vorhandenen Web-API-Server ein, um Websites neben einer vorhandenen API zu bedienen. Ich habe diesen Artikel locker verfolgt.

So sieht mein Global.asax.cs aus:

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();
    }
}

und Startup.cs:

public partial class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }
}

Wenn ich das Projekt ausführe, erhalte ich den Fehler

DLL 'libuv' konnte nicht geladen werden: Das angegebene Modul konnte nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E)

libuv ist eine Abhängigkeit von Turmfalke. Wenn ich es manuell aus dem Paketordner in den Ordner bin kopiere, funktioniert es. Das scheint mit diesem Kommentar GitHub Issue Sinn zu machen. Jetzt, wo project.json entfernt wird, wie kann ich es automatisch kopieren lassen?

Einige haben angegeben, dass sie nicht wissen, ob sie eine 32 oder 64 Bit Version von libuv verwenden sollen, da die Platform in den Projekteigenschaften auf Any CPU gesetzt ist. Ich habe versucht, es sowohl in der Lösung als auch in den Projekteinstellungen auf x64 zu setzen, und das Problem bleibt bestehen.

Wie kann ich libuv.dll automatisch direkt in das Build-Verzeichnis kopieren lassen?

Ich denke nicht, die Datei in das Projekt (anstatt in den Packages-Ordner) aufzunehmen und es zum Kopieren in das Ausgabeverzeichnis eine echte Lösung, nur ein Workaround. Ich hoffe, eine Lösung zu finden, keine Workaround.


Probieren Sie es aus - es könnte Ihr Problem lösen:

var host = new WebHostBuilder()
            .UseKestrel()
            // .UseWebRoot("wwwroot") keep it if you need it
            .UseContentRoot(Directory.GetCurrentDirectory()) // this could solve your problem
            // .UseUrls("http://0.0.0.0:5000") use this if you're using nginx
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

Ich hatte zuvor ein ähnliches Problem bei der Migration von Projekten. Visual Studio kann sich bei nicht übereinstimmenden Projekten oft schlecht benehmen.

Einfache Antwort: Sie müssen Ihre Projekte in das MSBuild / csproj-Format ändern.

Wenn Sie versuchen, .NET Core in Ihrer Lösung zu verwenden, klicken Sie mit der rechten Maustaste auf Ihr Projekt in Visual Studio. Wenn Edit xxxxxx.csproj nicht Edit xxxxxx.csproj wahrscheinlich Probleme auf wie die, über die du oben berichtest.

Im Grunde verwenden die .NET Core-Projektvorlagen beim Kompilieren des Projekts unterschiedliche Werkzeuge.

Die folgende Lösung ist eine allgemeine Methode, um fast alle Probleme in Bezug auf Projekte zu lösen, die versuchen, auf .NET Core zuzugreifen, aber Bibliotheken aus einem anderen Framework verwenden möchten. Es gibt kein gutes Werkzeug (bis jetzt), um dieses Problem zu überbrücken, also müssen Sie in den manuellen Modus wechseln.

Lass uns anfangen.

Die Lösung ist ziemlich einfach (aber es ist ein bisschen langweilig).

Schritt 1: Erstellen Sie ein neues Projekt mit dem neuen Format MSBuild / csproj

Erstellen Sie ein neues Projekt und wählen Sie ".NET Core".

In fast allen Fällen möchten Sie wahrscheinlich die ASP.NET Core-Webanwendungsvorlage vermeiden, aber das ist für eine weitere Diskussion alle zusammen.

Schritt 2: Richten Sie das richtige Framework aus

Klicken Sie mit der rechten Edit xxxxxx.csproj das Projekt und wählen Sie 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>

Wählen Sie ein Framework aus, das Sie targetieren möchten, und stellen Sie sicher, dass es unterstützt wird (hier ist eine Tabelle).
Ich habe net452 in dem obigen Code-Snippet für ein Beispiel verwendet. Mehr über die Benennung erfahren Sie hier .

Schritt 3. Wiederholen Sie das für alle Projekte.

Sie müssen dies für jedes Projekt in Ihrer Lösung tun, damit Visual Studio sich nicht unerwartet verhält.

Es gibt wirklich nicht viel online darüber, wie ASP.NET Core mit alten Frameworks funktioniert. Hoffentlich hilft dir das weiter. Ich wünschte, ich hätte diesen Rat früher an mir selbst gehabt.





kestrel-http-server