c# IIS के साथ केस्टल-libuv.dll रन पर लापता




asp.net asp.net-web-api (3)

मौजूदा एपीआई के साथ हम एक मौजूदा वेब एपीआई सर्वर सेट अप कर रहे हैं। मैं इस आलेख को ढीला कर रहा हूं।

यहां मेरा ग्लोबल.एएसएक्स सीएएस जैसा दिखता है:

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

और स्टार्टअप.cs:

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

जब मैं परियोजना चलाता हूं, तो मुझे त्रुटि मिलती है

डीएलएल 'libuv' लोड करने में असमर्थ: निर्दिष्ट मॉड्यूल नहीं मिला। (HRESULT से अपवाद: 0x8007007 ई)

लिविव केस्टल की निर्भरता है अगर मैं मैन्युअल रूप से पैकेज फ़ोल्डर से बिन फ़ोल्डर में इसे कॉपी करता हूं, तो यह काम करता है। ऐसा लगता है कि इस GitHub समस्या टिप्पणी के साथ समझ में आता है। अब उस प्रोजेक्ट। जेएसन से दूर ले जाया जा रहा है, मैं इसे स्वचालित रूप से कैसे कॉपी कर सकता हूं?

कुछ लोगों ने यह स्वीकार किया है कि यह पता नहीं है कि क्या 32 या 64 बिट संस्करण का उपयोग करना है क्योंकि प्लेटफ़ॉर्म प्रोजेक्ट गुणों में किसी भी CPU पर सेट है। मैंने इसे समाधान और प्रोजेक्ट दोनों सेटिंग्स में एक्स 64 में स्थापित करने की कोशिश की है और समस्या बनी रहती है

मैं libuv.dll को स्वचालित रूप से स्वचालित रूप से बिल्ड निर्देशिका में कैसे बना सकता हूं?

मैं प्रोजेक्ट में फ़ाइल को शामिल करने के बजाय (संकुल फ़ोल्डर के बजाय) पर विचार नहीं करता और इसे आउटपुट डायरेक्टरी को प्रतिलिपि बनाने के लिए एक वास्तविक समाधान, केवल एक वैकल्पिक हल। मैं एक समाधान खोजने की उम्मीद कर रहा हूं, एक वैकल्पिक हल नहीं


इसे आज़माएं - यह आपकी समस्या को हल कर सकता है:

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

ये कोड लिखें:

using Microsoft.Owin;
using Owin;
using System.Web.Http;

[assembly: OwinStartup(typeof(WebApiAndStaticFiles.OwinStartup))]

namespace WebApiAndStaticFiles
{
    public class OwinStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseDefaultFiles();
            app.UseStaticFiles();

            HttpConfiguration webApiConfiguration = new HttpConfiguration();
            GlobalConfiguration.Configure(webApiConfiguration); // Instead of GlobalConfiguration.Configure(WebApiConfig.Register);
            app.UseWebApi(webApiConfiguration);

        }
    }
}

और इन नूगेट संकुल को स्थापित करें:

<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net462" />
  <package id="Microsoft.Owin" version="3.1.0" targetFramework="net462" />
  <package id="Microsoft.Owin.FileSystems" version="3.1.0" targetFramework="net462" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.1.0" targetFramework="net462" />
  <package id="Microsoft.Owin.StaticFiles" version="3.1.0" targetFramework="net462" />
  <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net462" />
  <package id="Owin" version="1.0" targetFramework="net462" />

आप asp.net/iis होस्टेड ऐप पाइपलाइन के अंदर एस्प.net कोर पाइपलाइनों का उपयोग नहीं कर सकते हैं। लेकिन ओविन उस पाइप लाइन के लिए एकीकरण है जो आकर्षण की तरह काम करता है


परियोजनाओं को माइग्रेट करने से पहले मुझे एक समान समस्या थी दृश्य स्टूडियो बेमेल प्रोजेक्ट्स के साथ बहुत कुछ गलत व्यवहार कर सकता है

सरल उत्तर: आपको अपनी परियोजनाओं को MSBuild / csproj प्रारूप में बदलना होगा।

यदि आप अपने समाधान में .NET कोर का उपयोग करने की कोशिश कर रहे हैं, तो अपने प्रोजेक्ट को विजुअल स्टूडियो में राइट-क्लिक करें, और अगर आप Edit xxxxxx.csproj नहीं करते हैं, तो आपको समस्याएं होने वाली हैं जैसा आप ऊपर रिपोर्ट कर रहे हैं

असल में, प्रोजेक्ट संकलित करते समय .NET कोर प्रोजेक्ट टेम्पलेट विभिन्न टूलिंग का उपयोग करता है।

नीचे समाधान परियोजनाओं के बारे में लगभग सभी मुद्दों को हल करने का एक सामान्य तरीका है जो .NET कोर को लक्षित करने की कोशिश करते हैं, लेकिन एक अन्य ढांचे से पुस्तकालयों का उपयोग करना चाहते हैं। इस समस्या को पुल करने के लिए एक अच्छा उपकरण (अभी तक) नहीं है, इसलिए आपको मैन्युअल-मोड जाना होगा।

आएँ शुरू करें।

समाधान काफी आसान है (लेकिन यह थोड़ा थकाऊ है)।

चरण 1: नया MSBuild / csproj प्रारूप का उपयोग करके एक नई परियोजना बनाएं

एक नई परियोजना बनाएं, और ".NET कोर" चुनें।

लगभग सभी मामलों में, आप शायद एएसपी.नेट कोर वेब एप्लीकेशन टेम्प्लेट का इस्तेमाल नहीं करना चाहते हैं, लेकिन यह एक और चर्चा के लिए है।

चरण 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>

एक ढांचा चुनें जिसे आप लक्षित करना चाहते हैं, और सुनिश्चित करें कि यह समर्थित है (यहां तालिका है)।
मैंने एक उदाहरण के लिए ऊपर कोड स्निपेट में net452 का उपयोग किया है आप यहाँ नामकरण के बारे में अधिक जानकारी प्राप्त कर सकते हैं

चरण 3. सभी परियोजनाओं के लिए दोहराएं

आपको विजुअल स्टूडियो को अप्रत्याशित रूप से बर्ताव करने के लिए अपने समाधान में हर प्रोजेक्ट के लिए ऐसा करना होगा।

एएसपी.नेट कोर को पुराने ढांचे के साथ अच्छी तरह से काम करने के तरीके के बारे में बहुत ज्यादा ऑनलाइन नहीं है। उम्मीद है कि यह आपकी सहायता करेगा मेरा मानना ​​है कि मुझे पहले यह सलाह मेरे पास थी।







kestrel-http-server