Directory does not exist. Parameter name: directoryVirtualPath
C#asp.net MvcIisasp.net Mvc-4C# Problem Overview
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# Solutions
Solution 1 - C#
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.
Solution 2 - C#
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
Solution 3 - C#
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")
);
Solution 4 - C#
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
Solution 5 - C#
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.
Solution 6 - C#
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.
Solution 7 - C#
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
Solution 8 - C#
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.
Solution 9 - C#
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.
Solution 10 - C#
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
Solution 11 - C#
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"));
}
}
Solution 12 - C#
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.
Solution 13 - C#
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.
Solution 14 - C#
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.
Solution 15 - C#
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.
Solution 16 - C#
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.
Solution 17 - C#
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.
Solution 18 - C#
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"));
Solution 19 - C#
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 ...