参数名称:directoryVirtualPath

我正在使用Visual Studio Express 2012 RC。

  • 如果创建一个空白的“hello world MVC 4.5 project”
  • 我将它降级到4.0,因此它与我的主机(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
    

    这是什么意思 ?

    代码请求^^

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return Content("Hello world");
        }
    }
    

    那是我添加的唯一代码。

    application_start代码

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
    
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
    

    RouteConfig

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    一个FilterConfig

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
    }
    

    BundleConfig

     public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-1.*"));
    
            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui*"));
    
            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));
    
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));
    
            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
    
            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }
    }
    

    看起来这个错误来源于“应用程序目录中不包含所需的文件”,或者将代码上传到未配置为虚拟目录的目录中,或者甚至在不正确的目录中。


    这篇文章与目录不存在相似。 参数名称:directoryVirtualPath

    答案帮助我调试。 显然,目标服务器上缺少文件夹。 我的应用程序在本地运行良好,但是当我发布时,几个script子目录没有发布。 当我手动FTP'd他们,应用程序工作正常!


    在此处扩展信息。

    我经常将所有文件都捆绑在一个文件夹中,如下所示: "~/Content/js/angular/modules/*.js",只要文件夹存在"~/Content/js/angular/modules/*.js",这个工作就很好。

    问题是,如果该文件夹在发布时为空,它将不会被发布,并将导致上述例外。 所以现在我要么把empty.txt或类似手动添加文件夹的东西,如果我想他们现在保持空。

    链接地址: http://www.djcxy.com/p/71819.html

    上一篇: Parameter name: directoryVirtualPath

    下一篇: ASP.NET MVC4 error handling for 404, 401 and other exceptions