Répertoire n'existe pas. Nom du paramètre: directoryVirtualPath

Je viens de publier mon projet sur mon hôte sur Arvixe et j'obtiens cette erreur (fonctionne bien local):

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

Qu'est-ce que cela signifie ?

104
demandé sur tereško 2012-07-03 22:58:33

19 réponses

J'ai eu le même problème et j'ai découvert que j'avais des bundles qui pointaient vers des fichiers non existants en utilisant des caractères génériques {version} et * tels que

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

J'ai supprimé tout cela et l'erreur est partie.

216
répondu Martin Ørding-Thomsen 2012-10-04 16:25:24

J'ai eu ce même problème et ce n'était pas un problème de code. J'utilisais l'option de publication (pas celle FTP) et Visual Studio ne téléchargeait pas certains de mes scripts / css sur le serveur azure car ils n'étaient pas "inclus dans mon projet". Donc, localement, cela a très bien fonctionné, parce que les fichiers étaient là dans mon disque dur. Ce qui a résolu ce problème dans mon cas était " projet > afficher tous les fichiers..."et faites un clic droit sur ceux qui n'ont pas été inclus, incluez-les et publiez à nouveau

15
répondu dsnunez 2014-01-27 05:25:09

Voici un cours rapide que j'ai écrit pour rendre cela plus facile.

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

Pour l'utiliser, remplacez simplement ScriptBundle par BundleRelaxed dans votre code, comme dans:

        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")
            );
8
répondu Barnabas Kendall 2013-06-17 21:11:04

J'ai rencontré le même problème aujourd'hui, c'est en fait que j'ai trouvé que certains fichiers sous ~/Scripts ne sont pas publiés. Le problème est résolu après avoir publié les fichiers manquants

3
répondu Naga 2014-04-20 16:44:50

J'ai aussi eu cette erreur en ayant des répertoires inexistants dans Mes bundles.fichier de configuration. Changer ceci:

<?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>

À ceci:

<?xml version="1.0"?>
<bundleConfig ignoreIfDebug="true" ignoreIfLocal="true">
    <cssBundles>
    </cssBundles>
    <jsBundles>
    </jsBundles>
</bundleConfig>

Résolvez le problème pour moi.

2
répondu JerSchneid 2014-01-17 09:11:35

Comme @JerSchneid, mon problème était les répertoires vides, mais mon processus de déploiement était différent de L'OP. Je faisais un déploiement basé sur Git sur Azure (qui utilise Kudu), et je n'ai pas réalisé que git n'inclut pas les répertoires vides dans le repo. Voir https://stackoverflow.com/a/115992/1876622

Donc, ma structure de dossier locale était:

[racine du projet] / Content / jQuery-plugins / / avait des fichiers

[racine du projet] / Scripts / jQuery-plugins / / avait des fichiers

[racine du projet]/Scripts/divers-plugins // dossier vide

Alors que tout clone / pull de mon référentiel sur le serveur distant n'obtenait pas ledit répertoire vide:

[racine du projet] / Content / jQuery-plugins / / avait des fichiers

[racine du projet] / Scripts / jQuery-plugins / / avait des fichiers

La meilleure approche pour résoudre ce problème est de créer un .conserver le fichier dans le répertoire vide. Voir cette solution SO: https://stackoverflow.com/a/21422128/1876622

2
répondu HeyZiko 2017-05-23 12:10:36

J'ai eu le même problème. le problème dans mon cas était que le dossier du script avec tous les scripts bootstrap / jqueries n'était pas dans le dossier wwwroot. une fois que j'ai ajouté le dossier du script à wwwroot, l'erreur est partie.

2
répondu rafaelzm2000 2017-10-05 19:32:56

Cela peut-être un vieux problème.J'ai une erreur similaire et dans mon cas, c'était le dossier Scripts qui se cachait dans mon dossier Modèles. Stack trace indique clairement son répertoire manquant et par défaut tous les Scripts Java doivent être dans le dossier Scripts. Cela peut ne pas être applicable aux utilisateurs ci-dessus.

1
répondu CuriousRK 2016-01-07 04:11:30

J'avais créé une nouvelle application Angular et écrit

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

Mais je n'avais créé aucun services, donc le dossier services n'a pas été déployé lors de la publication car il était vide. Malheureusement, vous devez mettre un fichier factice dans un dossier vide pour qu'il publie

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

1
répondu tic 2016-03-24 20:59:00

Moi aussi, j'ai fait face au même problème. Navigué vers le chemin du fichier sous le dossier Script.Copié le nom de fichier exact et fait changement dans bundle.cs:

Ancien Code : //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-*"));

    }
}

Nouveau Code:

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"));
      }
}
1
répondu Adityan s nair 2016-09-04 05:55:42

J'ai eu ce problème quand j'ai ouvert un projet VS2017 dans VS2015, construit la solution puis téléchargé les DLL.

La reconstruction dans VS2017 et le re-téléchargement des dll ont résolu le problème.

1
répondu Steve Woods 2017-08-11 14:46:46

J'ai eu la même question! Il semble avec IIS Express. Je change L'URL D'IIS Express pour le Projet Comme:

"http://localhost:3555/"

Alors le problème a disparu.

0
répondu user2320546 2013-04-25 15:55:16

Cela peut également être causé par une condition de concurrence lors du déploiement:

Si vous utilisez "publier" de Visual Studio pour déployer sur un partage de fichiers réseau, cochez " supprimer tous les fichiers existants avant de publier."(Je le fais parfois pour m'assurer que nous ne dépendons pas inconsciemment des fichiers qui ont été supprimés du projet mais qui traînent toujours sur le serveur.)

Si quelqu'un accède au site avant que tous les fichiers JS/CSS requis ne soient redéployés, il démarre Application_Start et RegisterBundles ce qui échouera à construire correctement les faisceaux et à lancer cette exception.

Mais au moment où vous obtenez cette exception et allez vérifier le serveur, tous les fichiers nécessaires sont là où ils devraient être!

Cependant, l'application continue heureusement de servir le site, générant des 404 pour toute demande de bundle, ainsi que les pages non stylées / non fonctionnelles qui en résultent,et n'essaie jamais de reconstruire les bundles même après que les fichiers JS/CSS nécessaires sont maintenant disponibles.

Un le redéploiement à l'aide de "remplacer les fichiers correspondants par des copies locales" déclenchera le redémarrage de l'application et enregistrera correctement les bundles cette fois.

0
répondu CrazyPyro 2014-02-14 19:47:56

Mon problème était que mon site n'avait pas de fichiers à regrouper. Cependant, j'avais créé le site avec un modèle MVC, qui inclut des scripts jQuery. Bundle.config fait référence à ces fichiers et à leurs dossiers. N'ayant pas besoin des scripts, je les ai supprimés. Après avoir édité le bundle.config, tout était bon.

0
répondu CraigP 2014-07-29 20:52:57

Tout fonctionnait bien, puis tout en faisant des changements sans rapport et sur la prochaine construction est tombé sur le même problème. Utilisé le contrôle de source pour comparer aux versions précédentes et a découvert que mon ..Le dossier / Content / Scripts avait mystérieusement été vidé!

Restauré ../ Contenu / Scripts/*.*à partir d'une sauvegarde et tout a bien fonctionné!

Ps: en utilisant VS2012, MVC4, avait récemment mis à jour certains paquets NuGet, de sorte que cela aurait pu jouer un rôle dans le problème, mais tout a bien fonctionné pendant un certain temps après le mise à jour, donc pas sûr.

0
répondu nspire 2016-03-27 18:26:05

Regardez dans votre BundleConfig.fichier cs pour les lignes qui appellent IncludeDirectory()

Exemple:

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

Mon répertoire de grille n'existait pas.

0
répondu RolandoCC 2017-05-07 01:52:54

J'ai aussi eu cette erreur lorsque j'ai combiné tous mes paquets séparés en un seul paquet.

bundles.Add(new ScriptBundle("~/bundles/one").Include(
            "~/Scripts/one.js"));
bundles.Add(new ScriptBundle("~/bundles/two").Include(
            "~/Scripts/two.js"));

Changé en

bundles.Add(new ScriptBundle("~/bundles/js").Include(
            "~/Scripts/one.js",
            "~/Scripts/two.js"));

J'ai dû actualiser le pool d'applications sur le panneau de configuration de mon hébergement partagé pour résoudre ce problème.

0
répondu rene anderson 2017-07-08 21:36:56

Suppression de ces lignes de code de bundleConfig.fichier de classe cs résolu mon défi:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
0
répondu goddy 2018-01-18 11:02:56

Aucune de ces réponses ne m'a aidé depuis que j'ai créé mes fichiers jsx d'une manière étrange. Mon code fonctionnait en mode localhost mais a échoué en production.

Le correctif pour moi était d'aller dans le fichier csproj et de changer les chemins de fichiers de <None ... à <Content ...

0
répondu JacobIRR 2018-04-19 21:36:17