Directory does not exist. Parameter name: directoryVirtualPath

108

i just published my project to my host on Arvixe and get this error (Works fine local):

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

What does it mean ?

c#
asp.net-mvc
iis
asp.net-mvc-4
asked on Stack Overflow Jul 3, 2012 by BjarkeCK • edited Jul 30, 2012 by tereško

20 Answers

221

I had the same problem and found out that I had some bundles that pointed to non-exisiting files using {version} and * wildcards such as

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

I removed all of those and the error went away.

16

I had this same issue and it was not a code problem. I was using the publish option (not the FTP one) and Visual Studio was not uploading some of my scripts/css to the azure server because they were not "included in my project". So, locally it worked just fine, because files were there in my hard drive. What solved this issue in my case was "Project > Show all files..." and right click the ones that were not included, include them and publish again

answered on Stack Overflow Jan 27, 2014 by dsnunez
8

Here's a quick class I wrote to make this easier.

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

To use it, just replace ScriptBundle with BundleRelaxed in your code, as in:

        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")
            );
answered on Stack Overflow Jun 17, 2013 by Barnabas Kendall
3

I ran into the same issue today it is actually I found that some of files under ~/Scripts is not published. The issue is resolved after I published the missing files

answered on Stack Overflow Apr 20, 2014 by Naga
2

I also got this error by having non-existant directories in my bundles.config file. Changing this:

<?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>

To this:

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

Solve the problem for me.

answered on Stack Overflow Jan 17, 2014 by JerSchneid
2

Like @JerSchneid, my problem was empty directories, but my deployment process was different from the OP. I was doing a git-based deploy on Azure (which uses Kudu), and didn't realize that git doesn't include empty directories in the repo. See https://stackoverflow.com/a/115992/1876622

So my local folder structure was:

[Project Root]/Content/jquery-plugins // had files

[Project Root]/Scripts/jquery-plugins // had files

[Project Root]/Scripts/misc-plugins // empty folder

Whereas any clone / pull of my repository on the remote server was not getting said empty directory:

[Project Root]/Content/jquery-plugins // had files

[Project Root]/Scripts/jquery-plugins // had files

The best approach to fixing this is to create a .keep file in the empty directory. See this SO solution: https://stackoverflow.com/a/21422128/1876622

answered on Stack Overflow Sep 23, 2014 by HeyZiko • edited May 23, 2017 by Community
2

I had the same issue. the problem in my case was that the script's folder with all the bootstrap/jqueries scripts was not in the wwwroot folder. once I added the script's folder to wwwroot the error went away.

answered on Stack Overflow Oct 5, 2017 by rafaelzm2000
1

This can also be caused by a race condition while deploying:

If you use Visual Studio's "Publish" to deploy over a network file share, and check "Delete all existing files prior to publish." (I do this sometimes to ensure that we're not unknowingly still depending on files that have been removed from the project but are still hanging out on the server.)

If someone hits the site before all the required JS/CSS files are re-deployed, it will start Application_Start and RegisterBundles which will fail to properly construct the bundles and throw this exception.

But by the time you get this exception and go check the server, all the necessary files are right where they should be!

However, the application happily continues to serve the site, generating 404's for any bundle request, along with the unstyled/unfunctional pages that result from this, and never tries to rebuild the bundles even after the necessary JS/CSS files are now available.

A re-deploy using "Replace matching files with local copies" will trigger the app to restart and properly register the bundles this time.

answered on Stack Overflow Feb 14, 2014 by CrazyPyro
1

This may be an old issue.I have similar error and in my case it was Scripts folder hiding in my Models Folder. Stack trace clearly says its missing Directory and by default all Java Scripts should be in Scripts Folder. This may not be applicable to above users.

answered on Stack Overflow Jan 7, 2016 by CuriousRK
1

I had created a new Angular application and written

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

but I had created no services, so the services folder was not deployed on publish as it was empty. Unfortunately, you have to put a dummy file inside any empty folder in order for it to publish

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

answered on Stack Overflow Mar 24, 2016 by tic
1

I too faced the same issue. Browsed to the file path under Script Folder.Copied the exact file name and made change in bundle.cs:

Old Code : //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-*"));

    }
}

New Code :

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"));
      }
}
answered on Stack Overflow Sep 4, 2016 by Adityan s nair
1

I had this issue when I opened a VS2017 project in VS2015, built the solution and then uploaded the DLLs.

Rebuilding it in VS2017 and re-uploading the DLLs fixed the issue.

answered on Stack Overflow Aug 11, 2017 by Steve Woods
0

I got the same question! It seems to with IIS Express. I change the IIS Express' URL for Project Like:

"http://localhost:3555/"

then the problem gone.

answered on Stack Overflow Apr 25, 2013 by user2320546
0

My problem was that my site had no files to bundle. However, I had created the site with an MVC template, which includes jQuery scripts. The bundle.config referred to those files and their folders. Not needing the scripts, I deleted them. After editing the bundle.config, all was good.

answered on Stack Overflow Jul 29, 2014 by CraigP
0

All was working fine, then while making unrelated changes and on next build came across the same issue. Used source control to compare to previous versions and discovered that my ../Content/Scripts folder had mysteriously been emptied!

Restored ../Content/Scripts/*.*from a backup and all worked well!

ps: Using VS2012, MVC4, had recently updated some NuGet packages, so that might have played some part in the issue, but all ran well for a while after the update, so not sure.

answered on Stack Overflow Mar 27, 2016 by nspire
0

look into your BundleConfig.cs file for the lines that invokes IncludeDirectory()

ie:

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

my Grid directory did not exist.

answered on Stack Overflow May 7, 2017 by RolandoCC
0

I also had this error when I combined all my separated bundles into one bundle.

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

Changed to

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

I had to refresh application pool on my shared hosting's control panel to fix this issue.

answered on Stack Overflow Jul 8, 2017 by rene anderson
0

Removing this lines of code from the bundleConfig.cs class file resolved my challenge:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
answered on Stack Overflow Jan 18, 2018 by goddy • edited Jan 18, 2018 by ayaio
0

None of these answers helped me since I created my jsx files in a weird way. My code was working in localhost mode but failed in production.

The fix for me was to go into the csproj file and change the file paths from <None ... to <Content ...

answered on Stack Overflow Apr 19, 2018 by JacobIRR
0

Basically stack trace gives you the exact place (as highlighted in screenshot) you need to remove non-existing resource.

image showing stack trace

answered on Stack Overflow Aug 18, 2019 by sandeep talabathula

User contributions licensed under CC BY-SA 3.0