web-dev-qa-db-de.com

Verzeichnis existiert nicht Parametername: VerzeichnisVirtualPath

ich habe gerade mein Projekt auf meinem Host bei Arvixe veröffentlicht und erhalte diese Fehlermeldung (Works fine 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

Was heißt das ?

105
BjarkeCK

Ich hatte das gleiche Problem und stellte fest, dass ich einige Pakete hatte, die auf nicht vorhandene Dateien mit {version} und * Wildcards wie z

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

Ich habe alle entfernt und der Fehler ging weg.

218

Ich hatte das gleiche Problem und es war kein Code-Problem. Ich verwendete die Publish-Option (nicht die FTP-Option), und Visual Studio hat einige meiner Skripts/css nicht auf den Azure-Server hochgeladen, da sie nicht "in meinem Projekt enthalten" waren Gut, weil sich Dateien auf meiner Festplatte befanden ... Was in meinem Fall dieses Problem gelöst hat, war "Projekt> Alle Dateien anzeigen ...". Klicken Sie mit der rechten Maustaste auf die nicht enthaltenen Dateien, fügen Sie sie hinzu und veröffentlichen Sie sie erneut

16
dsnunez

Hier ist eine kurze Schulung, die ich geschrieben habe, um dies zu erleichtern. 

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

Um es zu verwenden, ersetzen Sie einfach ScriptBundle durch BundleRelaxed in Ihrem Code, wie in:

        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

Ich bin heute in die gleiche Ausgabe geraten. Ich habe festgestellt, dass einige Dateien unter ~/Scripts nicht veröffentlicht werden. Das Problem wurde behoben, nachdem ich die fehlenden Dateien veröffentlicht habe

3
Naga

Wie @JerSchneid war mein Problem ein leeres Verzeichnis, aber mein Bereitstellungsprozess unterschied sich vom OP .. __ leere Verzeichnisse im Repo. Siehe https://stackoverflow.com/a/115992/1876622

Meine lokale Ordnerstruktur war also:

[Projektwurzel]/Content/Jquery-Plugins // hatte Dateien 

[Projektstammverzeichnis] ​​/ Scripts/Jquery-Plugins // hatte Dateien 

[Projektstamm]/Scripts/Misc-Plugins // leerer Ordner

Während bei jedem Klon/Pull meines Repositorys auf dem Remote-Server das leere Verzeichnis nicht abgerufen wurde:

[Projektwurzel]/Content/Jquery-Plugins // hatte Dateien 

[Projektstammverzeichnis] ​​/ Scripts/Jquery-Plugins // hatte Dateien 

Um dies zu beheben, können Sie am besten eine .keep-Datei im leeren Verzeichnis erstellen. Siehe diese SO -Lösung: https://stackoverflow.com/a/21422128/1876622

2
HeyZiko

Ich habe diesen Fehler auch erhalten, weil in meiner bundles.config-Datei nicht vorhandene Verzeichnisse vorhanden sind. Dies ändern:

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

Zu diesem:

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

Löse das Problem für mich.

2
JerSchneid

Ich hatte das gleiche Problem. In meinem Fall bestand das Problem darin, dass der Ordner des Skripts mit allen Bootstrap-/Jqueries-Skripts nicht im Ordner wwwroot lag. Nachdem ich den Ordner des Skripts zu wwwroot hinzugefügt hatte, ging der Fehler weg.

2
rafaelzm2000

Auch ich stand vor demselben Problem. Durchsuchen des Dateipfads unter Skriptordner. Kopieren Sie den genauen Dateinamen und nehmen Sie Änderungen in bundle.cs vor:

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

    }
}

Neuer 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

Dies kann auch durch eine Racebedingung während der Bereitstellung verursacht werden:

Wenn Sie "Veröffentlichen" von Visual Studio für die Bereitstellung über eine Netzwerkdateifreigabe verwenden, aktivieren Sie "Alle vorhandenen Dateien vor der Veröffentlichung löschen". (Ich mache dies manchmal, um sicherzustellen, dass wir nicht unbewusst immer noch von Dateien abhängen, die aus dem Projekt entfernt wurden, aber immer noch auf dem Server hängen.)

Wenn jemand die Site besucht, bevor alle erforderlichen JS/CSS-Dateien erneut bereitgestellt werden, werden Application_Start und RegisterBundles gestartet, wodurch die Bundles nicht ordnungsgemäß erstellt und diese Ausnahme ausgelöst werden.

Aber wenn Sie diese Ausnahme erhalten und den Server überprüfen, sind alle erforderlichen Dateien genau dort, wo sie sein sollten!

Die Anwendung wird jedoch weiterhin glücklich für die Site verwendet und generiert 404-Werte für jede Bundle-Anforderung zusammen mit den daraus resultierenden unstyled/unfunktionalen Seiten. Sie versucht auch nicht, die Bundles neu aufzubauen, selbst nachdem die erforderlichen JS/CSS-Dateien jetzt verfügbar sind.

Bei einer erneuten Bereitstellung mit "Ersetzen übereinstimmender Dateien durch lokale Kopien" wird die App neu gestartet und die Bundles werden diesmal ordnungsgemäß registriert.

1
CrazyPyro

Ich hatte dieses Problem, als ich ein VS2017-Projekt in VS2015 geöffnet, die Lösung erstellt und dann die DLLs hochgeladen habe.

Durch die Neuerstellung in VS2017 und das erneute Hochladen der DLLs wurde das Problem behoben.

1
Steve Woods

Dies kann ein altes Problem sein. Ich habe einen ähnlichen Fehler und in meinem Fall war es der Scripts-Ordner, der sich in meinem Models-Ordner versteckte. Im Stack-Trace wird eindeutig das fehlende Verzeichnis angegeben. Standardmäßig sollten alle Java-Skripts im Skriptordner sein. Dies gilt möglicherweise nicht für die oben genannten Benutzer. 

1
CuriousRK

Ich hatte eine neue Angular-Anwendung erstellt und geschrieben

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

ich hatte jedoch keine services erstellt, daher wurde der services-Ordner bei der Veröffentlichung nicht bereitgestellt, da er leer war. Leider müssen Sie eine Dummy-Datei in einen leeren Ordner legen, damit sie veröffentlicht werden kann

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

1
tic

Ich habe die gleiche Frage! Es scheint mit IIS auszudrücken. Ich ändere die IIS Express-URL für das Projekt Like:

"http://localhost:3555/"

dann ist das problem weg.

0
user2320546

Mein Problem war, dass meine Site keine Dateien zum Bündeln hatte. Ich hatte die Site jedoch mit einer MVC-Vorlage erstellt, die jQuery-Skripts enthält. Die bundle.config verwies auf diese Dateien und ihre Ordner. Ich brauchte die Skripte nicht und löschte sie. Nach der Bearbeitung der bundle.config war alles gut.

0
CraigP

Grundsätzlich gibt Ihnen Stack Trace den genauen Ort (wie im Screenshot hervorgehoben), an dem Sie nicht vorhandene Ressourcen entfernen müssen.

image showing stack trace

0

Alles hat gut funktioniert, dann kam es zu Änderungen, und beim nächsten Build stießen wir auf das gleiche Problem. Verwendete die Quellcodeverwaltung zum Vergleich mit früheren Versionen und entdeckte, dass mein ../Content/Scripts-Ordner auf mysteriöse Weise geleert wurde!

Restored ../Content/Scripts/*.*from von einem Backup und alles hat gut funktioniert!

ps: Mit VS2012 hatte MVC4 kürzlich einige NuGet-Pakete aktualisiert, so dass das Problem möglicherweise eine Rolle gespielt hat, aber nach dem Update lief alles eine Weile gut. 

0
nspire

Keine dieser Antworten hat mir geholfen, seit ich meine jsx-Dateien auf seltsame Weise erstellt habe. Mein Code funktionierte im localhost-Modus, ist aber in der Produktion fehlgeschlagen.

Die Lösung für mich bestand darin, in die Datei csproj zu gehen und die Dateipfade von <None ... in <Content ... zu ändern.

0
JacobIRR

Das Entfernen dieser Codezeilen aus der Klassendatei bundleConfig.cs löste meine Herausforderung:

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

suchen Sie in der Datei BundleConfig.cs nach den Zeilen, die IncludeDirectory () aufrufen.

dh: 

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

mein Grid-Verzeichnis existiert nicht.

0
RolandoCC

Dateien, auf denen Ihre Anwendung ausgeführt wird, fehlen. Versuchen Sie, Ihr Projekt zu erstellen und erneut hochzuladen. Wenn Sie eine Sicherung haben, versuchen Sie, von der Sicherung zurückzukehren. Wird das Problem lösen

0
Enes

Ich hatte auch diesen Fehler, als ich alle getrennten Bundles zu einem Bundle zusammenfasste.

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

Gewechselt zu

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

Ich musste Anwendungspool aktualisieren im Kontrollfeld meines Shared Hosting, um dieses Problem zu beheben.

0
rene anderson