Каталог не существует. Имя параметра: 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
Что это значит ?
19 ответов:
У меня была та же проблема, и я обнаружил, что у меня были некоторые пакеты, которые указывали на несуществующие файлы, используя {version} и * подстановочные знаки, такие как
bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js"));Я удалил все это, и ошибка исчезла.
У меня была та же проблема, и это не было проблемой кода. Я использовал опцию публикации (не FTP), и Visual Studio не загружала некоторые из моих сценариев / css на сервер azure, потому что они не были "включены в мой проект". Так что локально это работало просто отлично, потому что файлы были там на моем жестком диске. То, что решило эту проблему в моем случае, было " Project > Show all files..."и щелкните правой кнопкой мыши те, которые не были включены, включите их и опубликуйте снова
Вот краткий урок, который я написал, чтобы сделать это проще.
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); } }Чтобы использовать его, просто замените ScriptBundle на BundleRelaxed в вашем коде, как в:
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") );
Я столкнулся с той же проблемой сегодня на самом деле я обнаружил, что некоторые файлы под ~/Scripts не публикуются. Проблема решена после публикации недостающих файлов
Я также получил эту ошибку, имея несуществующие каталоги в моих связках.конфигурационный файл. Изменение этого:
<?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. Я выполнял развертывание на основе git в Azure (которая использует Kudu) и не понимал, что git не включает пустые каталоги в репо. См. https://stackoverflow.com/a/115992/1876622
Таким образом, моя локальная структура папок была:
[корень проекта] / Content/jQuery-plugins / / had files
[корень проекта] / Scripts/jQuery-plugins / / had files
[корень проекта] / Скрипты / разные плагины / / пустая папка
В то время как любой клон / pull моего репозитория на удаленном сервере не получал указанный пустой каталог:
[корень проекта] / Content/jQuery-plugins / / had files
[корень проекта] / Scripts/jQuery-plugins / / had files
Лучший подход к исправлению этого-создать a .храните файл в пустом каталоге. Смотрите это так решение: https://stackoverflow.com/a/21422128/1876622
У меня была та же проблема. проблема в моем случае заключалась в том, что папка скрипта со всеми сценариями bootstrap/jqueries не находилась в папке wwwroot. как только я добавил папку скрипта в wwwroot, ошибка исчезла.
Это может быть старая проблема.У меня есть аналогичная ошибка, и в моем случае это была папка Scripts, скрывающаяся в папке Models. Stack trace ясно говорит, что его каталог отсутствует, и по умолчанию все сценарии Java должны быть в папке Scripts. Это может быть неприменимо к вышеуказанным пользователям.
Я создал новое
Angularприложение и написалbundles.Add(new ScriptBundle("~/bundles/app") .IncludeDirectory("~/Angular", "*.js") .IncludeDirectory("~/Angular/directives/shared", "*.js") .IncludeDirectory("~/Angular/directives/main", "*.js") .IncludeDirectory("~/Angular/services", "*.js"));Но я не создал никакой
services, поэтому папкаservicesне была развернута при публикации, Так как она была пуста. К сожалению, вы должны поместить фиктивный файл в любую пустую папку, чтобы он опубликовал
Я тоже столкнулся с той же проблемой. Перешел к пути к файлу в папке Script.Скопировал точное имя файла и внес изменения в пакет.cs:
Старый Код : //Пакет.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")); } }
У меня была эта проблема, когда я открыл проект VS2017 в VS2015, построил решение и затем загрузил библиотеки DLL.
Восстановление его в VS2017 и повторная загрузка DLL исправили проблему.
У меня тот же вопрос! Кажется, с IIS Express. Я изменяю URL-адрес IIS Express для проекта следующим образом:
"http://localhost:3555/"Тогда проблема исчезла.
Это также может быть вызвано состоянием гонки при развертывании:
Если вы используете Visual Studio "опубликовать" для развертывания через общий сетевой файловый ресурс и установите флажок "удалить все существующие файлы перед публикацией."(Я делаю это иногда, чтобы убедиться, что мы не по незнанию все еще зависим от файлов, которые были удалены из проекта, но все еще висят на сервере.)
Если кто-то зайдет на сайт до того, как все необходимые файлы JS/CSS будут повторно развернуты, он начнет
Но к тому времени, когда вы получите это исключение и пойдете проверять сервер, все необходимые файлы будут там, где они должны быть!Application_StartиRegisterBundlesкоторый не сможет правильно построить пакеты и бросить это исключение.Однако приложение с радостью продолжает обслуживать сайт, генерируя 404-е для любого запроса пакета, а также неструктурированные/нефункциональные страницы, которые являются результатом этого, и никогда не пытается перестроить пакеты даже после того, как необходимые файлы JS/CSS теперь доступны.
A повторное развертывание с помощью "заменить соответствующие файлы локальными копиями" приведет к перезапуску приложения и правильной регистрации пакетов на этот раз.
Моя проблема заключалась в том, что на моем сайте не было файлов для связывания. Тем не менее, я создал сайт с шаблоном MVC, который включает в себя сценарии jQuery. Пакет.config ссылается на эти файлы и их папки. Не нуждаясь в скриптах, я удалил их. После редактирования пакета.конфиг, все было хорошо.
Все работало нормально, затем при внесении несвязанных изменений и при следующей сборке наткнулся на ту же проблему. Использовал систему управления версиями для сравнения с предыдущими версиями и обнаружил, что мой ..Папка / Content / Scripts таинственным образом была опустошена!
Восстановлен ../ Content / Scripts/*.* из резервной копии и все работало хорошо!
Ps: используя VS2012, MVC4 недавно обновил некоторые пакеты NuGet, так что это, возможно, сыграло некоторую роль в проблеме, но все шло хорошо некоторое время после обновление, так что не уверен.
Загляните в свой BundleConfig.cs-файл для строк, вызывающих IncludeDirectory()
Ie:
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"));Мне пришлось обновить пул приложений на панели управления моего общего хостинга, чтобы устранить эту проблему.
Удаление этой строки кода из bundleConfig.CS class file решил мою проблему:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js"));
Ни один из этих ответов не помог мне, так как я создал свои файлы
jsxстранным образом. Мой код работал в режиме localhost, но потерпел неудачу в производстве.Исправление для меня состояло в том, чтобы войти в файл
csprojи изменить пути к файлам с<None ...на<Content ...
Comments