目录不存在。 参数名称:directoryVirtualPath

我刚刚发布我的项目,我的主机在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 

这是什么意思 ?

我有同样的问题,发现我有一些捆绑指向非现有文件使用{版本}和*通配符,如

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

我删除了所有这些,错误消失了。

我有这个相同的问题,这不是一个代码问题。 我正在使用发布选项(而不是FTP),而Visual Studio没有将我的一些脚本/ css上传到Azure服务器,因为它们没有被“包含在我的项目中”。 所以,在本地它工作得很好,因为文件在我的硬盘上。 在我的情况下,解决这个问题是“项目>显示所有文件…”,并右键单击未包括的,包括他们,再次发布

这是我写的一个简单的课程,以使它更容易。

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

要使用它,只需用您的代码中的BundleRelaxedreplaceScriptBundle,如下所示:

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

我也有我的bundles.config文件中有不存在的目录,这个错误。 改变这个:

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

为我解决问题。

像@JerSchneid,我的问题是空的目录,但我的部署过程是不同的OP。 我在Azure上做了一个基于git的部署(使用Kudu),并没有意识到git不包括repo中的空目录。 请参阅https://stackoverflow.com/a/115992/1876622

所以我的本地文件夹结构是:

[Project Root] / Content / jquery-plugins //有文件

[Project Root] / Scripts / jquery-plugins //有文件

[Project Root] / Scripts / misc-plugins //空文件夹

而在远程服务器上我的仓库的任何克隆/拉没有得到说空目录:

[Project Root] / Content / jquery-plugins //有文件

[Project Root] / Scripts / jquery-plugins //有文件

解决这个问题的最好方法是在空目录中创build一个.keep文件。 看到这个SO解决scheme: https : //stackoverflow.com/a/21422128/1876622

我今天遇到了同样的问题,实际上我发现〜/ Scripts下的一些文件没有发布。 发布丢失的文件后,问题就解决了

我创build了一个新的Angular应用程序,并写入

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

但是我没有创build任何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/

我有同样的问题! 这似乎与IIS Express。 我更改了IIS Express的项目URL:

 "http://localhost:3555/" 

那么问题就没有了。

这也可能是由于部署时的竞态条件造成的:

如果您使用Visual Studio的“发布”通过networking文件共享进行部署,并选中“在发布之前删除所有现有文件”。 (我有时候会这样做,以确保我们不会在不知不觉中依赖于已经从项目中删除但仍然在服务器上的文件。)

如果有人在重新部署所有必需的JS / CSS文件之前点击了该站点,则将启动Application_StartRegisterBundles ,这将无法正确构造捆绑并抛出此exception。

但是,当你得到这个exception,并去检查服务器,所有必要的文件是正确的,他们应该在哪里!

然而,应用程序继续为网站提供服务,为任何包请求生成404,以及由此产生的无风格/不可操作的页面,甚至在必要的JS / CSS文件现在可用之后也不会尝试重build这些包。

使用“用本地副本replace匹配文件”重新部署将触发应用程序重新启动并正确注册捆绑。

我的问题是,我的网站没有文件捆绑。 不过,我已经创build了一个MVC模板,其中包括jQuery脚本的网站。 bundle.config引用这些文件及其文件夹。 不需要脚本,我删除了它们。 编辑bundle.config后,一切都很好。

这可能是一个老问题。我有类似的错误,在我的情况下,它是隐藏在我的模型文件夹中的脚本文件夹。 堆栈跟踪清楚地说明了它缺less的目录,默认情况下,所有的Java脚本都应该在脚本文件夹中。 这可能不适用于以上用户。

所有的工作都很好,然后做出无关的改变,在下一个版本遇到同样的问题。 使用源代码pipe理来比较以前的版本,发现我的../Content/Scripts文件夹已经被清空了!

恢复../Content/Scripts/*.*从备份和一切运作良好!

ps:使用VS2012,MVC4,最近更新了一些NuGet包,所以可能在这个问题上起了一些作用,但是更新后都运行良好,所以不太清楚。

我也面临同样的问题。 浏览到脚本文件夹下的文件path。复制确切的文件名并在bundle.cs中进行更改:

旧代码://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")); } } 

查看你的BundleConfig.cs文件中的行,调用IncludeDirectory()

即:

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

我的网格目录不存在。

当我将所有分离的软件包合并成一个软件包时,我也遇到了这个错误。

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

我不得不刷新我的共享主机的控制面板上的应用程序池来解决这个问题。

我在VS2015中打开一个VS2017项目时,遇到了这个问题,build立了解决scheme,然后上传了DLL。

在VS2017中重build它,重新上传DLLs修复了这个问题。

我遇到过同样的问题。 在我的情况下问题是脚本的所有引导/ jqueries脚本的文件夹不在wwwroot文件夹中。 一旦我将脚本的文件夹添加到wwwroot,错误消失了。