निर्देशिका मौजूद नहीं है। पैरामीटर नाम: DirectoryVirtualPath


115

मैंने अपने प्रोजेक्ट को Arvixe पर अपने होस्ट में प्रकाशित किया और यह त्रुटि प्राप्त की (वर्क्स ठीक स्थानीय):

Server Error in '/' Application.

Directory does not exist.
Parameter name: directoryVirtualPath

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Directory does not exist.
Parameter name: directoryVirtualPath

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[ArgumentException: Directory does not exist.
Parameter name: directoryVirtualPath]
   System.Web.Optimization.Bundle.IncludeDirectory(String directoryVirtualPath, String searchPattern, Boolean searchSubdirectories) +357
   System.Web.Optimization.Bundle.Include(String[] virtualPaths) +287
   IconBench.BundleConfig.RegisterBundles(BundleCollection bundles) +75
   IconBench.MvcApplication.Application_Start() +128

[HttpException (0x80004005): Directory does not exist.
Parameter name: directoryVirtualPath]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9160125
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +131
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +194
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +339
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +253

[HttpException (0x80004005): Directory does not exist.
Parameter name: directoryVirtualPath]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9079228
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +97
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +256

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.237

इसका क्या मतलब है ?

जवाबों:


229

मेरे पास एक ही समस्या थी और मुझे पता चला कि मेरे पास कुछ बंडल थे जो {संस्करण} और * वाइल्डकार्ड्स जैसे गैर-एक्सिसिटिंग फ़ाइलों की ओर इशारा करते थे जैसे

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    "~/Scripts/jquery-{version}.js"));

मैंने उन सभी को हटा दिया और त्रुटि दूर हो गई।


2
यह सुनिश्चित नहीं है कि यह "आश्चर्यजनक अस्पष्ट" या खोजने में कठिन कैसे है; स्टायरट्रेस आपको My +1 BundleConfig.RegisterBundlesसे कॉल करने के लिए सीधे इंगित करता है, Application_Startइसके बजाय @ user2465004 के उत्तर पर जाता है।
क्रेजीप्रो

3
मुझे वही त्रुटि मिली क्योंकि मेरे बंडलों में संदर्भित / स्क्रिप्ट / फ़ोल्डर मेरे सर्वर पर मौजूद नहीं था।
user1616625

मैं वेब एपीआई के लिए एक asp.net mvc परियोजना में परिवर्तित और वास्तव में jquery, सीएसएस फ़ाइलों का कोई उपयोग नहीं था। खुशी है कि मुझे आपकी पोस्ट मिली। इसे ठीक किया और सब कुछ ठीक चल रहा है।
सैम

3
इसके अतिरिक्त, Azure में प्रकाशित होने पर यह आपको खाली फ़ोल्डर प्रकाशित करने की अनुमति नहीं देता है। मेरे पास एक .IncludeDirectory ("~ / Scripts / Create / Controllers", "* .js") स्टेटमेंट था, और जबकि Controllers फ़ोल्डर वास्तव में मौजूद था, उसमें वास्तव में अभी तक कुछ भी नहीं था और यह उसी त्रुटि का कारण बना। मैंने केवल फ़ोल्डर में एक रिक्त पाठ फ़ाइल डाल दी, और फिर यह काम किया।
रामबलर टोनिंग

यह मेरे साथ तब हुआ जब मेरे बंडल में खाली निर्देशिकाओं को शामिल किया गया था, जिसे मैंने भविष्य में फाइलें जोड़ने की योजना बनाई थी। स्थानीय रूप से सब कुछ ठीक था क्योंकि उन निर्देशिकाओं का अस्तित्व था, लेकिन जब मैंने अज़ूर को धक्का दिया, तो वे नहीं बने,
JMK

16

मेरे पास यही मुद्दा था और यह कोड की समस्या नहीं थी। मैं प्रकाशित विकल्प (एफ़टीपी एक नहीं) का उपयोग कर रहा था और विज़ुअल स्टूडियो मेरी कुछ स्क्रिप्ट / सीएसएस को एज़्योर सर्वर पर अपलोड नहीं कर रहा था क्योंकि वे "मेरे प्रोजेक्ट में शामिल नहीं थे"। इसलिए, स्थानीय स्तर पर यह ठीक काम करता है, क्योंकि फाइलें मेरी हार्ड ड्राइव में थीं। मेरे मामले में इस समस्या का हल क्या था "प्रोजेक्ट> सभी फाइलें दिखाएं ..." और जो शामिल नहीं थे उन पर राइट क्लिक करें, उन्हें शामिल करें और फिर से प्रकाशित करें


+1 यह स्वीकार किए गए से बेहतर उत्तर है, और शायद इसे मर्ज कर दिया जाए। चूंकि "फ़ाइल / निर्देशिका नहीं मिली" के जवाब में करने के लिए पहली तार्किक बात यह है कि यह पहले से ही है कि यह मौजूद है। लेकिन इस स्थिति में यह थोड़ा डरपोक है, क्योंकि आप जांच करते हैं और यह स्थानीय रूप से मौजूद है, बस सर्वर पर नहीं। एक और भी अजीब स्थिति के लिए, मेरा जवाब देखें।
क्रेजीप्रो

मेरा भी यह मुद्दा था। मेरे स्थानीय बॉक्स से काम कर रहे हैं, लेकिन निर्माण सर्वर से यह नहीं किया। यह पता चला कि बिल्ड सर्वर पैकेज में टाइपस्क्रिप्ट कंपाइलर द्वारा उत्पन्न .js फ़ाइलों को शामिल नहीं करता था। बिल्ड सर्वर पर टाइपस्क्रिप्ट टूल का पुराना संस्करण। एक त्वरित सुधार के रूप में मैंने परियोजना में .js फाइलें शामिल कीं।
उत्तेजित करता है

मेरे लिए यह बिटटॉरेंट सिंक के साथ एक समस्या थी जिसका उपयोग फाइलों को तैनात करने के लिए किया जाता था। कुछ फ़ाइलों को कुछ गड़बड़ के कारण बस तैनात नहीं किया गया था ..
फिलिप

10

यहाँ एक त्वरित वर्ग है जो मैंने इसे आसान बनाने के लिए लिखा है।

using System.Web.Hosting;
using System.Web.Optimization;

// a more fault-tolerant bundle that doesn't blow up if the file isn't there
public class BundleRelaxed : Bundle
{
    public BundleRelaxed(string virtualPath)
        : base(virtualPath)
    {
    }

    public new BundleRelaxed IncludeDirectory(string directoryVirtualPath, string searchPattern, bool searchSubdirectories)
    {
        var truePath = HostingEnvironment.MapPath(directoryVirtualPath);
        if (truePath == null) return this;

        var dir = new System.IO.DirectoryInfo(truePath);
        if (!dir.Exists || dir.GetFiles(searchPattern).Length < 1) return this;

        base.IncludeDirectory(directoryVirtualPath, searchPattern);
        return this;
    }

    public new BundleRelaxed IncludeDirectory(string directoryVirtualPath, string searchPattern)
    {
        return IncludeDirectory(directoryVirtualPath, searchPattern, false);
    }
}

इसका उपयोग करने के लिए, बस ScriptBundle को अपने कोड में बंडल के साथ बदलें।

        bundles.Add(new BundleRelaxed("~/bundles/admin")
            .IncludeDirectory("~/Content/Admin", "*.js")
            .IncludeDirectory("~/Content/Admin/controllers", "*.js")
            .IncludeDirectory("~/Content/Admin/directives", "*.js")
            .IncludeDirectory("~/Content/Admin/services", "*.js")
            );

2
महान उदाहरण - यहां केवल गोचारा है जो आपके द्वारा उपयोग किए जा सकने वाले एक्सटेंशन HostingEnvironment.MapPathको ध्यान में नहीं रखता है BundleTable.VirtualPathProvider( गैर-डिफ़ॉल्ट हो सकता है और नहीं भीHostingEnvironment.VirtualPathProvider )। इस स्थिति के लिए, आप उपयोग करने के लिए ऊपर दिए गए उदाहरण को बदलना चाहते हैं BundleTable.VirtualPathProvider.DirectoryExistsऔर BundleTable.VirtualPathProvider.GetDirectoryफ़ाइल पैटर्न खोजें थोड़ी अधिक समस्याग्रस्त हो जाती हैं, लेकिन शुरू करने के लिए अच्छी जगह है।
स्लीवरनिंजा - MSFT

यह मेरे लिए मुद्दा तय किया। अभी भी पता नहीं चला है कि अपमानजनक बंडल कौन है। इस शक्तिशाली कोड नमूने के लिए धन्यवाद, आपने मुझे आज दोपहर को आगे बढ़ने से बचाया।
डॉन रोलिंग

3

मैं उसी मुद्दे में भाग गया आज यह वास्तव में पाया गया है कि ~ / लिपियों के तहत कुछ फाइलें प्रकाशित नहीं होती हैं। लापता फ़ाइलों को प्रकाशित करने के बाद समस्या हल हो गई है


2

मुझे अपनी बंडलों में गैर-मौजूद निर्देशिकाओं के द्वारा भी यह त्रुटि मिली। फाइल फाइल। इसे बदलना:

<?xml version="1.0"?>
<bundleConfig ignoreIfDebug="true" ignoreIfLocal="true">
    <cssBundles>
        <add bundlePath="~/css/shared">
            <directories>
                <add directoryPath="~/content/" searchPattern="*.css"></add>
            </directories>
        </add>
    </cssBundles>
    <jsBundles>
        <add bundlePath="~/js/shared">
            <directories>
                <add directoryPath="~/scripts/" searchPattern="*.js"></add>
            </directories>
            <!--
            <files>
                <add filePath="~/scripts/jscript1.js"></add>
                <add filePath="~/scripts/jscript2.js"></add>
            </files>
            -->
        </add>
    </jsBundles>
</bundleConfig>

इसके लिए:

<?xml version="1.0"?>
<bundleConfig ignoreIfDebug="true" ignoreIfLocal="true">
    <cssBundles>
    </cssBundles>
    <jsBundles>
    </jsBundles>
</bundleConfig>

मेरे लिए समस्या का समाधान करो।


2

@JerSchneid की तरह, मेरी समस्या खाली निर्देशिका थी, लेकिन मेरी तैनाती प्रक्रिया ओपी से अलग थी। मैं Azure पर एक गिट-आधारित तैनाती कर रहा था (जो कि Kudu का उपयोग करता है), और यह महसूस नहीं किया कि git में रेपो में खाली निर्देशिका शामिल नहीं है। Https://stackoverflow.com/a/115992/1876622 देखें

तो मेरी स्थानीय फ़ोल्डर संरचना थी:

[प्रोजेक्ट रूट] / सामग्री / jquery- प्लगइन्स // में फाइलें थीं

[प्रोजेक्ट रूट] / लिपियों / jquery- प्लगइन्स // में फाइलें थीं

[प्रोजेक्ट रूट] / लिपियों / misc- प्लगइन्स // खाली फ़ोल्डर

जबकि रिमोट सर्वर पर मेरी रिपॉजिटरी के किसी भी क्लोन / पुल को खाली निर्देशिका नहीं कहा जा रहा था:

[प्रोजेक्ट रूट] / सामग्री / jquery- प्लगइन्स // में फाइलें थीं

[प्रोजेक्ट रूट] / लिपियों / jquery- प्लगइन्स // में फाइलें थीं

इसे ठीक करने का सबसे अच्छा तरीका खाली निर्देशिका में एक .keep फ़ाइल बनाना है। इस SO समाधान को देखें: https://stackoverflow.com/a/21422128/1876622


2

मेरी भी यही समस्या थी। मेरे मामले में समस्या यह थी कि सभी बूटस्ट्रैप / jqueries स्क्रिप्ट के साथ स्क्रिप्ट का फ़ोल्डर wwwroot फ़ोल्डर में नहीं था। एक बार जब मैंने स्क्रिप्ट के फ़ोल्डर को wwwroot में जोड़ा तो त्रुटि चली गई।


1

यह भी तैनात करते समय एक दौड़ की स्थिति के कारण हो सकता है:

यदि आप एक नेटवर्क फ़ाइल शेयर पर तैनात करने के लिए Visual Studio के "प्रकाशित करें" का उपयोग करते हैं, और "प्रकाशित होने से पहले सभी मौजूदा फ़ाइलों को हटाएं" जांचें। (मैं यह सुनिश्चित करने के लिए कभी-कभी ऐसा करता हूं कि हम अनजाने में अभी भी उन फ़ाइलों के आधार पर नहीं हैं जो परियोजना से हटा दी गई हैं, लेकिन अभी भी सर्वर पर लटका हुआ है।)

यदि सभी आवश्यक जेएस / सीएसएस फ़ाइलों को फिर से तैनात करने से पहले कोई साइट को हिट करता है, तो यह शुरू हो जाएगा Application_Startऔर RegisterBundlesजो बंडल को ठीक से बनाने और इस अपवाद को फेंकने में विफल होगा।

लेकिन जब तक आप इस अपवाद को प्राप्त करते हैं और सर्वर की जांच करते हैं, तब तक सभी आवश्यक फाइलें सही हैं जहां उन्हें होना चाहिए!

हालाँकि, एप्लिकेशन खुशी से साइट की सेवा जारी रखता है, जो किसी भी बंडल अनुरोध के लिए 404 जेनरेट करता है, इसके साथ ही अनस्टेल्ड / अनफिनिश्नल पेज भी मिलते हैं, और इसके बाद कभी भी जेएस / सीएसएस फाइलों के उपलब्ध होने के बाद भी बंडलों के पुनर्निर्माण की कोशिश नहीं की जाती है।

"स्थानीय प्रतियों के साथ मेल खाने वाली फ़ाइलों को बदलें" का उपयोग करके एक फिर से तैनाती इस बार पुनः आरंभ करने और बंडलों को ठीक से पंजीकृत करने के लिए ऐप को ट्रिगर करेगी।


1

यह एक पुराना मुद्दा हो सकता है। मेरे पास समान त्रुटि है और मेरे मामले में यह मेरे मॉडल फ़ोल्डर में छुपाया गया फ़ोल्डर था। स्टैक ट्रेस स्पष्ट रूप से अपनी अनुपलब्ध निर्देशिका कहती है और डिफ़ॉल्ट रूप से सभी जावा स्क्रिप्ट लिपियों फ़ोल्डर में होना चाहिए। यह उपर्युक्त उपयोगकर्ताओं पर लागू नहीं हो सकता है।


1

मैंने एक नया Angularएप्लिकेशन बनाया था और लिखा था

bundles.Add(new ScriptBundle("~/bundles/app")
    .IncludeDirectory("~/Angular", "*.js")
    .IncludeDirectory("~/Angular/directives/shared", "*.js")
    .IncludeDirectory("~/Angular/directives/main", "*.js")
    .IncludeDirectory("~/Angular/services", "*.js"));

लेकिन मैंने कोई निर्माण नहीं किया था services, इसलिए servicesफ़ोल्डर को खाली होने पर प्रकाशित पर तैनात नहीं किया गया था। दुर्भाग्य से, आपको प्रकाशित करने के लिए किसी भी खाली फ़ोल्डर के अंदर एक डमी फ़ाइल डालनी होगी

https://blogs.msdn.microsoft.com/webdevelopertips/2010/04/29/tip-105-did-you-know-how-to-include-empty-directory-when-package-a-web-application/


1

मैंने भी उसी मुद्दे का सामना किया। स्क्रिप्ट फ़ोल्डर के तहत फ़ाइल पथ पर ब्राउज़ किया गया। सटीक फ़ाइल नाम को अपनाया और बंडल में परिवर्तन किया।

पुराना कोड: //Bundle.cs

public class BundleConfig

{

    public static void RegisterBundles(BundleCollection bundles)

    {

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));

        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"));

    }
}

नया कोड:

public class BundleConfig

{

      public static void RegisterBundles(BundleCollection bundles)

      {

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-1.10.2.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate.js"));

        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-2.6.2.js"));
      }
}

1

मेरे पास यह समस्या थी जब मैंने VS2015 में VS2017 परियोजना खोली, समाधान बनाया और फिर DLL अपलोड किया।

VS2017 में इसे फिर से बनाना और DLL को फिर से अपलोड करना इस मुद्दे को तय करता है।


0

मुझे वही सवाल मिला! यह IIS एक्सप्रेस के साथ लगता है। मैं प्रोजेक्ट की तरह IIS एक्सप्रेस URL बदल देता हूं:

"http://localhost:3555/"

तब समस्या चली गई।


0

मेरी समस्या यह थी कि मेरी साइट में बंडल करने के लिए कोई फाइल नहीं थी। हालाँकि, मैंने साइट को MVC टेम्पलेट के साथ बनाया था, जिसमें jQuery स्क्रिप्ट शामिल हैं। Bundle.config उन फ़ाइलों और उनके फ़ोल्डरों को संदर्भित करता है। स्क्रिप्ट की जरूरत नहीं, मैंने उन्हें डिलीट कर दिया। बंडल.कॉन्फिग को संपादित करने के बाद, सब अच्छा था।


0

सभी ठीक काम कर रहे थे, फिर असंबंधित बदलाव करते हुए और अगली बिल्ड में एक ही मुद्दे पर आया। पिछले संस्करणों की तुलना करने के लिए स्रोत नियंत्रण का उपयोग किया गया और पता चला कि मेरे ../Content/Scripts फ़ोल्डर को रहस्यमय तरीके से खाली कर दिया गया था!

पुनर्स्थापित किया गया ../Content/Scripts/*.* बैकअप से और सभी ने अच्छी तरह से काम किया!

ps: VS2012, MVC4 का उपयोग करते हुए, हाल ही में कुछ NuGet पैकेजों को अपडेट किया था, ताकि समस्या में कुछ भूमिका निभाई जा सके, लेकिन अपडेट के बाद कुछ समय के लिए सभी अच्छी तरह से चले, इसलिए यकीन नहीं होता।


0

इनडायरेक्ट्री () शामिल करने वाली लाइनों के लिए अपने बंडलकॉन्फ़िग.कैंस फ़ाइल को देखें।

अर्थात:

  bundles.Add(new Bundle("~/bundle_js_angularGrid").IncludeDirectory(
                       "~/Scripts/Grid", "*.js", true));

मेरी ग्रिड निर्देशिका मौजूद नहीं थी।


0

मेरे पास यह त्रुटि भी थी जब मैंने अपने सभी अलग किए गए बंडलों को एक बंडल में जोड़ दिया।

bundles.Add(new ScriptBundle("~/bundles/one").Include(
            "~/Scripts/one.js"));
bundles.Add(new ScriptBundle("~/bundles/two").Include(
            "~/Scripts/two.js"));

में परिवर्तित किया गया

bundles.Add(new ScriptBundle("~/bundles/js").Include(
            "~/Scripts/one.js",
            "~/Scripts/two.js"));

मुझे इस समस्या को ठीक करने के लिए अपने साझा होस्टिंग कंट्रोल पैनल पर एप्लिकेशन पूल को रीफ्रेश करना था ।


0

BundleConfig.cs वर्ग फ़ाइल से कोड की इस पंक्तियों को हटाने से मेरी चुनौती हल हो गई:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));

0

इनमें से किसी भी उत्तर ने मेरी मदद नहीं की क्योंकि मैंने अपनी jsxफ़ाइलों को एक अजीब तरीके से बनाया। मेरा कोड लोकलहोस्ट मोड में काम कर रहा था लेकिन प्रोडक्शन में असफल रहा।

मेरे लिए ठीक में जाना था csprojफ़ाइल और से फ़ाइल पथ को बदलने <None ...के लिए<Content ...


0

मूल रूप से स्टैक ट्रेस आपको सटीक स्थान देता है (जैसा कि स्क्रीनशॉट में हाइलाइट किया गया है) आपको गैर-मौजूदा संसाधन को हटाने की आवश्यकता है।

छवि स्टैक ट्रेस दिखा रही है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.