123

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 ?

tereško
  • 58,060
  • 25
  • 98
  • 150
BjarkeCK
  • 5,694
  • 5
  • 41
  • 59

21 Answers21

240

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.

Martin Ørding-Thomsen
  • 7,207
  • 3
  • 21
  • 22
  • 2
    Not sure how this is "amazingly obscure" or hard to find; the stacktrace points you straight to the `BundleConfig.RegisterBundles` call from `Application_Start` My +1 goes to @user2465004 's answer instead. – CrazyPyro Feb 14 '14 at 19:18
  • 3
    I received the same error because the /scripts/ folder referred to in my bundles did not exist on my server. – user1616625 Feb 25 '14 at 15:08
  • I converted a asp.net mvc project to web api and really had no use of jquery, css files. Glad I found your post. Fixed it and everything is working fine. – Sam Mar 21 '15 at 13:21
  • 3
    In addition to this, when publishing to Azure it doesn't seem to let you publish empty folders. I had a .IncludeDirectory("~/Scripts/Create/Controllers", "*.js") statement, and while the Controllers folder did indeed exist it didn't actually have anything in it yet and this caused the same error. I just put a blank text file in the folder, and then it worked. – RamblerToning Apr 16 '15 at 16:18
  • This happened to me when I had empty directories included in my bundle config, which I planned to add files to in the future. Everything was fine locally because those directories existed, but when I pushed to Azure, they didn't get created, – JMK Jun 26 '15 at 13:22
  • the comment from @RamblerToning worked for me. it threw an error on empty directories. – AceMark Aug 20 '16 at 17:43
15

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

dsnunez
  • 827
  • 6
  • 14
  • +1 This is a much better answer than the accepted one, and should maybe be merged into it. Since the first logical thing to do in response to a "file/directory not found" is already to go check that it exists. But in this situation it's a bit sneakier, because you check and it does exist locally, just not on the server. For an even weirder situation, see my answer. – CrazyPyro Feb 14 '14 at 19:35
  • I also had this issue. Deploying from my local box worked but from the build server it didn't. Turned out to be that the build server wasn't including the .js files generated by the TypeScript compiler in the package. Likely an older version of the TypeScript tools on the build server. As a quick fix I included the .js files in the project. – stimms Mar 18 '14 at 15:05
  • For me it was a problem with BitTorrent Sync used to deploy files. Some files were simply not deployed due to some glitch.. – Filip May 26 '14 at 16:37
10

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")
            );
Barnabas Kendall
  • 4,317
  • 1
  • 32
  • 24
  • 2
    Great example - only gotcha here is that `HostingEnvironment.MapPath` does not take into consideration [`BundleTable.VirtualPathProvider`](https://aspnetoptimization.codeplex.com/SourceControl/latest#src/System.Web.Optimization/BundleTable.cs) extensions you may be using (_may be non-default and not `HostingEnvironment.VirtualPathProvider`_). For this case, you would want to convert the example above to use `BundleTable.VirtualPathProvider.DirectoryExists` and `BundleTable.VirtualPathProvider.GetDirectory`. **File Pattern** searches become a bit more problematic, but good place to start. – SliverNinja - MSFT Feb 27 '16 at 17:57
  • This fixed the issue for me. Still haven't figured out who the offending bundle is. Thank you for this powerful code sample, you saved me from further aggravation this afternoon. – Don Rolling Jan 17 '17 at 22:11
3

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.

CrazyPyro
  • 3,257
  • 3
  • 30
  • 39
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

Naga
  • 2,368
  • 3
  • 23
  • 33
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.

JerSchneid
  • 5,817
  • 4
  • 34
  • 37
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

Community
  • 1
  • 1
HeyZiko
  • 1,660
  • 15
  • 28
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.

rafaelzm2000
  • 133
  • 1
  • 4
  • 15
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.

CuriousRK
  • 69
  • 7
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/

tic
  • 2,484
  • 1
  • 21
  • 33
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"));
      }
}
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.

Steve Woods
  • 588
  • 4
  • 8
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.

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.

CraigP
  • 125
  • 1
  • 6
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.

nspire
  • 1,567
  • 23
  • 26
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.

RolandoCC
  • 868
  • 1
  • 14
  • 19
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.

rene anderson
  • 81
  • 2
  • 5
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"));
Eric Aya
  • 69,473
  • 35
  • 181
  • 253
goddy
  • 1
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 ...

JacobIRR
  • 8,545
  • 8
  • 39
  • 68
0

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

image showing stack trace

sandeep talabathula
  • 3,238
  • 3
  • 29
  • 38
0

I ran into this type of problem after wasting an hr or two i found the solution, First let me explain why this happens, This error is given when the bundleConfig.cs has reference to directory which does not exist this can be inside the content folder or the scripts folder.

Fix copy all the content in the content directory to the deployed/remote server content folder and Same with the scripts.

Ad Kahn
  • 551
  • 4
  • 6