web-dev-qa-db-fra.com

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

je viens de publier mon projet sur mon hôte Arvixe et j'obtiens cette erreur (ça marche bien en 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 ça veut dire ?

105
BjarkeCK

J'ai eu le même problème et j'ai découvert que certains ensembles indiquaient des fichiers non existants utilisant {j} et * comme joker

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

J'ai enlevé tous ceux-ci et l'erreur est partie.

218

J'ai eu le même problème et ce n'était pas un problème de code. J'utilisais l'option de publication (pas celle de FTP) et Visual Studio n'envoyait pas certains de mes scripts/css sur le serveur Azure car ils n'étaient pas "inclus dans mon projet" . Donc, cela fonctionnait localement. très bien, car des fichiers se trouvaient sur mon disque dur . Ce qui a résolu ce problème dans mon cas, c’était "Projet> Afficher tous les fichiers ..." et un clic droit sur ceux qui n’étaient pas inclus, les inclure et les publier à nouveau.

16
dsnunez

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
Barnabas Kendall

J'ai rencontré le même problème aujourd'hui. En fait, j'ai constaté que certains fichiers sous ~/Scripts n'étaient pas publiés. Le problème est résolu après la publication des fichiers manquants.

3
Naga

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

Donc, ma structure de dossier local était:

[Project Root]/Content/jquery-plugins // avait des fichiers 

[Racine de projet]/Scripts/jquery-plugins // avait des fichiers 

[Racine du projet]/Scripts/misc-plugins // dossier vide

Considérant que tout clone/pull de mon référentiel sur le serveur distant ne recevait pas ledit répertoire vide:

[Project Root]/Content/jquery-plugins // avait des fichiers 

[Racine de projet]/Scripts/jquery-plugins // avait des fichiers 

La meilleure solution consiste à créer un fichier .keep dans le répertoire vide. Voir cette solution SO: https://stackoverflow.com/a/21422128/1876622

2
HeyZiko

J'ai aussi eu cette erreur en ayant des répertoires inexistants dans mon fichier bundles.config. Changer cela:

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

Pour ça:

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

Résoudre le problème pour moi.

2
JerSchneid

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

2
rafaelzm2000

Moi aussi j'ai fait face au même problème. Accédé au chemin du fichier sous Script Folder.Copied le nom de fichier exact et fait changer 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
Adityan s nair

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

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

Si une personne accède au site avant que tous les fichiers JS/CSS requis ne soient redéployés, il démarrera Application_Start et RegisterBundles, ce qui ne permettra pas de construire correctement les ensembles et lancera cette exception.

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

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

Un redéploiement utilisant "Remplacer les fichiers correspondants par des copies locales" déclenchera le redémarrage de l'application et l'enregistrement correct des lots cette fois-ci.

1
CrazyPyro

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

Le reconstruire dans VS2017 et re-télécharger les DLL ont résolu le problème.

1
Steve Woods

C’est peut-être un problème ancien. J'ai une erreur similaire et dans mon cas c’était le dossier Scripts caché dans mon dossier Modèles. La trace de pile indique clairement que son répertoire est manquant et que, par défaut, tous les scripts Java doivent figurer dans le dossier Scripts. Cela peut ne pas être applicable aux utilisateurs ci-dessus. 

1
CuriousRK

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 comme je n'avais pas créé services, le dossier services n'a pas été déployé lors de la publication car il était vide. Malheureusement, vous devez mettre un fichier fictif dans tout dossier vide pour pouvoir le publier.

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

1
tic

J'ai la même question!. Il semble avec IIS Express. Je change l'URL de IIS Express pour Project Like:

"http://localhost:3555/"

alors le problème est parti.

0
user2320546

Mon problème était que mon site n'avait aucun fichier à regrouper. Cependant, j'avais créé le site avec un modèle MVC, qui inclut des scripts jQuery. Bundle.config faisait 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
CraigP

En gros, la trace de pile vous donne l'emplacement exact (comme indiqué dans la capture d'écran) nécessaire pour supprimer une ressource non existante.

image showing stack trace

0
sandeep talabathula

Tout fonctionnait bien, puis, tout en apportant des modifications sans rapport avec la version suivante, le même problème se posait. A utilisé le contrôle de code source pour comparer les versions précédentes et découvert que mon dossier ../Content/Scripts avait été mystérieusement vidé!

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

ps: À l’aide de VS2012, MVC4 avait récemment mis à jour certains paquets NuGet, ce qui a peut-être joué un rôle dans le problème, mais tout s’est bien passé pendant un certain temps après la mise à jour; 

0
nspire

Aucune de ces réponses ne m'a aidé depuis que j'ai créé mes fichiers jsx de 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
JacobIRR

Supprimer ces lignes de code du fichier de classe bundleConfig.cs a résolu mon problème:

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

recherchez dans votre fichier BundleConfig.cs les lignes qui invoquent IncludeDirectory ()

c'est à dire: 

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

mon répertoire de grille n'existait pas.

0
RolandoCC

Les fichiers qui exécutent votre application sont manquants. Essayez de construire et de re-télécharger votre projet. Ou si vous avez une sauvegarde, essayez de revenir de la sauvegarde. Va résoudre le problème

0
Enes

J'ai également 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"));

Je devais actualiser le pool d'applications sur le panneau de commande de mon hébergement partagé pour résoudre ce problème.

0
rene anderson