Каталог не существует. Имя параметра: 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

Что это значит?

104 голоса | спросил BjarkeCK 3 J000000Tuesday12 2012, 22:58:33

16 ответов


0

У меня была та же проблема, и я обнаружил, что у меня есть несколько пакетов, которые указывают на несуществующие файлы, используя {version} и * символы подстановки, такие как

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

Я удалил все из них, и ошибка исчезла.

ответил Martin Ørding-Thomsen 4 +04002012-10-04T20:25:24+04:00312012bEurope/MoscowThu, 04 Oct 2012 20:25:24 +0400 2012, 20:25:24
0

У меня была такая же проблема, и это не было проблемой кода. Я использовал опцию публикации (не FTP), и Visual Studio не загружал некоторые из моих скриптов /CSS на сервер Azure, потому что они не были «включены в мой проект». Итак, локально это работало просто отлично, потому что файлы были на моем жестком диске. В моем случае эта проблема была решена как "Проект> Показать все файлы ..." и щелкните правой кнопкой мыши те, которые не были включены, включите их и снова опубликуйте

ответил dsnunez 27 Jam1000000amMon, 27 Jan 2014 09:25:09 +040014 2014, 09:25:09
0

Вот небольшой урок, который я написал, чтобы сделать это проще.

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")
            );
ответил Barnabas Kendall 18 J0000006Europe/Moscow 2013, 01:11:04
0

Сегодня я столкнулся с той же проблемой. На самом деле я обнаружил, что некоторые файлы в ~ /Scripts не публикуются. Проблема решена после того, как я опубликовал отсутствующие файлы

ответил Naga 20 PMpSun, 20 Apr 2014 20:44:50 +040044Sunday 2014, 20:44:50
0

Как и @JerSchneid, моей проблемой были пустые каталоги, но процесс развертывания отличался от OP. Я делал развертывание на основе git в Azure (в котором используется Kudu) и не осознавал, что git не включает в себя пустые каталоги в репозитории. См. 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 //имел файлы

Лучший способ исправить это - создать файл .keep в пустой директории. Посмотрите это SO решение: https://stackoverflow.com/a/21422128/1876622

ответил HeyZiko 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 23 Sep 2014 16:30:08 +0400 2014, 16:30:08
0

У меня была такая же проблема. проблема в моем случае заключалась в том, что папка скрипта со всеми скриптами bootstrap /jqueries не была в папке wwwroot. как только я добавил папку скрипта в wwwroot, ошибка исчезла.

ответил rafaelzm2000 5 +03002017-10-05T22:32:56+03:00312017bEurope/MoscowThu, 05 Oct 2017 22:32:56 +0300 2017, 22:32:56
0

Это также может быть вызвано состоянием гонки при развертывании:

Если вы используете «Публикация» в Visual Studio для развертывания через сетевой файловый ресурс и установите флажок «Удалить все существующие файлы перед публикацией». (Я делаю это иногда, чтобы убедиться, что мы по незнанию все еще зависим от файлов, которые были удалены из проекта, но все еще зависают на сервере.)

Если кто-то заходит на сайт до того, как все необходимые файлы JS /CSS будут повторно развернуты, он запустит Application_Start и RegisterBundles, который не сможет правильно скомпилировать пакеты и выдать это исключение.

Но когда вы получите это исключение и отправитесь на сервер, все необходимые файлы будут там, где они должны быть!

Тем не менее, приложение успешно продолжает обслуживать сайт, генерируя 404 для любого запроса пакета, вместе с неустановленными /неработающими страницами, которые вытекают из этого, и никогда не пытается перестроить пакеты даже после того, как необходимые файлы JS /CSS теперь доступны.

Повторное развертывание с использованием «Заменить совпадающие файлы локальными копиями» приведет к перезапуску приложения и правильной регистрации пакетов на этот раз.

ответил CrazyPyro 14 FebruaryEurope/MoscowbFri, 14 Feb 2014 23:47:56 +0400000000pmFri, 14 Feb 2014 23:47:56 +040014 2014, 23:47:56
0

Я создал новое приложение 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 не была развернута при публикации, поскольку она была пустой. К сожалению, вы должны поместить фиктивный файл в любую пустую папку, чтобы его можно было опубликовать

‹ пакетное веб-приложение /" rel =" nofollow "> https://blogs.msdn.microsoft.com/webdevelopertips/2010/04/29/tip-105-did-you-know-how-to-include -empty-каталог, когда-пакет-а-веб-приложение /
ответил tic 24 MarpmThu, 24 Mar 2016 23:59:00 +03002016-03-24T23:59:00+03:0011 2016, 23:59:00
0

У меня была эта проблема, когда я открыл проект VS2017 в VS2015, собрал решение и затем загрузил библиотеки DLL.

Перестройка его в VS2017 и повторная загрузка библиотек DLL устранили проблему.

ответил Steve Woods 11 PM00000050000004631 2017, 17:46:46
0

У меня такой же вопрос! Кажется, с IIS Express. Я изменяю URL IIS Express для Project Like:

"http://localhost:3555/"

тогда проблема ушла.

ответил user2320546 25 PMpThu, 25 Apr 2013 19:55:16 +040055Thursday 2013, 19:55:16
0

Моя проблема заключалась в том, что на моем сайте не было файлов для объединения. Однако я создал сайт с шаблоном MVC, который включает в себя скрипты jQuery. В bundle.config упоминаются эти файлы и их папки. Не нужны скрипты, я их удалил. После редактирования bundle.config все было хорошо.

ответил CraigP 30 J000000Wednesday14 2014, 00:52:57
0

Все работало нормально, потом при внесении несвязанных изменений и при следующей сборке натолкнулся на ту же проблему. Использовал систему контроля версий для сравнения с предыдущими версиями и обнаружил, что моя папка ../Content/Scripts была загадочным образом опустошена!

Восстановлено ../Content/Scripts/*.* из резервной копии и все работало хорошо!

ps. Используя VS2012, MVC4 недавно обновил некоторые пакеты NuGet, так что, возможно, они сыграли определенную роль в этой проблеме, но все работали некоторое время после обновления, так что не уверен.

ответил nspire 27 MarpmSun, 27 Mar 2016 21:26:05 +03002016-03-27T21:26:05+03:0009 2016, 21:26:05
0

найдите в своем файле BundleConfig.cs строки, которые вызывают IncludeDirectory ()

то есть:

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

мой каталог Grid не существует.

ответил RolandoCC 7 Mayam17 2017, 04:52:54
0

У меня также была эта ошибка, когда я объединял все свои отдельные пакеты в один пакет.

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

Мне пришлось обновить пул приложений на панели управления моего общего хостинга, чтобы решить эту проблему.

ответил rene anderson 9 J000000Sunday17 2017, 00:36:56
0

Удаление этих строк кода из файла класса bundleConfig.cs решило мою проблему:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
ответил goddy 18 Jam1000000amThu, 18 Jan 2018 11:27:44 +030018 2018, 11:27:44
0

Ни один из этих ответов не помог мне, так как я странным образом создал свои файлы jsx. Мой код работал в режиме локального хоста, но не работал на производстве.

Исправление для меня заключалось в том, чтобы перейти в файл csproj и изменить пути к файлам с <None ... в <Content ...

ответил JacobIRR 20 AMpFri, 20 Apr 2018 00:36:17 +030036Friday 2018, 00:36:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132