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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Я также получил эту ошибку, имея несуществующие каталоги в моем файле 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>

Решите проблему для меня.

Ответ 6

Подобно @JerSchneid, моя проблема была пустым каталогам, но мой процесс развертывания отличался от OP. Я занимался развертыванием git на Azure (которое использует Kudu), и не понимал, что git не содержит пустые каталоги в репо. См. fooobar.com/questions/200/...

Итак, моя локальная структура папок была:

[Project Root]/Content/jquery-plugins//имели файлы

[Project Root]/Scripts/jquery-plugins//имели файлы

[Корень проекта]/Скрипты/misc-plugins//пустая папка

В то время как любой клон/притяжение моего репозитория на удаленном сервере не получал пустую директорию:

[Project Root]/Content/jquery-plugins//имели файлы

[Project Root]/Scripts/jquery-plugins//имели файлы

Лучший способ исправить это - создать файл .keep в пустом каталоге. См. Это SO-решение: fooobar.com/questions/200/...

Ответ 7

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

Ответ 8

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

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

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

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

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

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

Ответ 9

Это может быть старая проблема. У меня такая же ошибка, и в моем случае это была папка Scripts, скрывающаяся в моей папке моделей. Трассировка стека ясно говорит о его недостающей директории, и по умолчанию все скрипты Java должны быть в папке Scripts. Это может быть неприменимо к вышеперечисленным пользователям.

Ответ 10

Я создал новое приложение Angular и написал

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

но я создал no 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/

Ответ 11

Я тоже столкнулся с той же проблемой. Просмотрен путь к файлу в Script Folder.Copied точное имя файла и внесено изменение в 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"));
      }
}

Ответ 12

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

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

Ответ 13

У меня тот же вопрос! Это похоже на IIS Express. Я изменяю URL-адрес IIS Express для Project Like:

"http://localhost:3555/"

тогда проблема исчезла.

Ответ 14

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

Ответ 15

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

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

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

Ответ 16

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

т.е.:

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

моя директория Grid не существовала.

Ответ 17

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

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

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

Ответ 18

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

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

Ответ 19

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

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

Ответ 20

Файлы, на которых запущено ваше приложение, отсутствуют. Попробуйте создать и повторно загрузить свой проект. Или, если у вас есть резервная копия, попробуйте вернуться из резервной копии. Решит проблему

Ответ 21

По сути, трассировка стека дает вам точное место (как показано на скриншоте), необходимое для удаления несуществующего ресурса.

image showing stack trace

Ответ 22

Существует проблема пути к папке скрипта, найдите ее и поместите в ее основной путь (~\Project_Name\Scripts)