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 ?
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.
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
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")
);
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
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.
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
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.
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.
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
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"));
}
}
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.
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.
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.
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.
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.
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.
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.
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"));
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 ...