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

19 ответов:

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

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

чтобы использовать его, просто замените 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

[проекта Root] / Scripts/jQuery-plugins / / had files

[корень проекта]/Скрипты/разное-Плагины // пустая папка

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

[корень проекта] / Content / jQuery-plugins / / had files

[корень проекта] / Скрипты / jQuery-плагины / / были файлы

лучший подход к исправлению этого является создание .сохранить файл в пустой каталог. Смотрите это так решение:https://stackoverflow.com/a/21422128/1876622

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

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

https://blogs.msdn.microsoft.com/webdevelopertips/2010/04/29/tip-105-did-you-know-how-to-include-empty-directory-when-package-a-web-application/

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

повторное развертывание с помощью "заменить соответствующие файлы с локальными копиями" вызовет приложение, чтобы перезапустить и правильно зарегистрировать пакеты на этот раз.

моя проблема заключалась в том, что на моем сайте не было файлов для связывания. Тем не менее, я создал сайт с шаблоном 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 file и изменить пути к файлам от <None ... до <Content ...