La directory non esiste. Nome parametro: directoryVirtualPath


115

ho appena pubblicato il mio progetto sul mio host su Arvixe e ricevo questo errore (funziona bene localmente):

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

Cosa significa ?

Risposte:


229

Ho avuto lo stesso problema e ho scoperto che avevo alcuni pacchetti che indicavano file non esistenti utilizzando {versione} e * caratteri jolly come

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

Ho rimosso tutti quelli e l'errore è andato via.


2
Non sono sicuro di come questo sia "incredibilmente oscuro" o difficile da trovare; lo stacktrace ti punta direttamente alla BundleConfig.RegisterBundleschiamata da Application_StartMy +1 va invece alla risposta di @ user2465004.
CrazyPyro

3
Ho ricevuto lo stesso errore perché la cartella / scripts / a cui si fa riferimento nei miei bundle non esisteva sul mio server.
user1616625

Ho convertito un progetto asp.net mvc in web api e davvero non ho usato jquery, file css. Sono contento di aver trovato il tuo post. Risolto il problema e tutto funziona correttamente.
Sam

3
Inoltre, durante la pubblicazione in Azure, non sembra consentire la pubblicazione di cartelle vuote. Avevo un'istruzione .IncludeDirectory ("~ / Scripts / Create / Controllers", "* .js") e sebbene la cartella Controllers esistesse effettivamente, in realtà non conteneva ancora nulla e questo causava lo stesso errore. Ho appena messo un file di testo vuoto nella cartella e poi ha funzionato.
RamblerToning

Questo è successo a me quando avevo directory vuote incluse nella configurazione del mio bundle, a cui avevo pianificato di aggiungere file in futuro. Tutto andava bene localmente perché quelle directory esistevano, ma quando ho eseguito il push su Azure, non sono state create,
JMK

16

Ho avuto lo stesso problema e non è stato un problema di codice. Stavo usando l'opzione di pubblicazione (non quella FTP) e Visual Studio non caricava alcuni dei miei script / css sul server azure perché non erano "inclusi nel mio progetto". Quindi, localmente ha funzionato bene, perché i file erano lì nel mio disco rigido. Ciò che ha risolto questo problema nel mio caso è stato "Progetto> Mostra tutti i file ..." e fai clic con il pulsante destro del mouse su quelli non inclusi, includili e pubblicali di nuovo


+1 Questa è una risposta molto migliore di quella accettata e forse dovrebbe essere incorporata in essa. Poiché la prima cosa logica da fare in risposta a un "file / directory non trovato" è già di andare a controllare che esista. Ma in questa situazione è un po 'più subdolo, perché controlli ed esiste localmente, ma non sul server. Per una situazione ancora più strana, vedi la mia risposta.
CrazyPyro

Ho avuto anche questo problema. La distribuzione dalla mia casella locale ha funzionato ma dal server di compilazione non ha funzionato. Si è scoperto che il server di compilazione non includeva i file .js generati dal compilatore TypeScript nel pacchetto. Probabilmente una versione precedente degli strumenti TypeScript sul server di compilazione. Come soluzione rapida ho incluso i file .js nel progetto.
stimmi il

Per me è stato un problema con BitTorrent Sync utilizzato per distribuire i file. Alcuni file semplicemente non sono stati distribuiti a causa di qualche glitch ..
Filip

10

Ecco un breve corso che ho scritto per renderlo più 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);
    }
}

Per usarlo, basta sostituire ScriptBundle con BundleRelaxed nel codice, come 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")
            );

2
Ottimo esempio: solo il gotcha qui è che HostingEnvironment.MapPathnon prende in considerazione le BundleTable.VirtualPathProviderestensioni che potresti utilizzare ( potrebbe essere non predefinito e nonHostingEnvironment.VirtualPathProvider ). In questo caso, dovresti convertire l'esempio sopra per usare BundleTable.VirtualPathProvider.DirectoryExistse BundleTable.VirtualPathProvider.GetDirectory. Le ricerche di pattern di file diventano un po 'più problematiche, ma un buon punto di partenza.
SliverNinja - MSFT,

Questo ha risolto il problema per me. Non ho ancora capito chi sia il pacchetto offensivo. Grazie per questo potente esempio di codice, mi hai salvato da ulteriori fastidi questo pomeriggio.
Don Rolling

3

Oggi mi sono imbattuto nello stesso problema, in realtà ho scoperto che alcuni file in ~ / Scripts non sono stati pubblicati. Il problema è stato risolto dopo aver pubblicato i file mancanti


2

Ho anche ricevuto questo errore avendo directory inesistenti nel mio file bundles.config. Cambiando questo:

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

A questa:

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

Risolvi il problema per me.


2

Come @JerSchneid, il mio problema erano le directory vuote, ma il mio processo di distribuzione era diverso dall'OP. Stavo eseguendo una distribuzione basata su git su Azure (che usa Kudu) e non mi rendevo conto che git non include directory vuote nel repository. Vedere https://stackoverflow.com/a/115992/1876622

Quindi la mia struttura di cartelle locali era:

[Project Root] / Content / jquery-plugins // aveva dei file

[Project Root] / Scripts / jquery-plugins // aveva dei file

[Project Root] / Scripts / misc-plugins // cartella vuota

Considerando che qualsiasi clone / pull del mio repository sul server remoto non riceveva la directory vuota:

[Project Root] / Content / jquery-plugins // aveva dei file

[Project Root] / Scripts / jquery-plugins // aveva dei file

L'approccio migliore per risolvere questo problema è creare un file .keep nella directory vuota. Vedi questa soluzione SO: https://stackoverflow.com/a/21422128/1876622


2

Ho avuto lo stesso problema. il problema nel mio caso era che la cartella dello script con tutti gli script bootstrap / jqueries non era nella cartella wwwroot. una volta aggiunta la cartella dello script a wwwroot, l'errore è scomparso.


1

Ciò può anche essere causato da una condizione di competizione durante la distribuzione:

Se utilizzi "Pubblica" di Visual Studio per eseguire la distribuzione su una condivisione file di rete, seleziona "Elimina tutti i file esistenti prima della pubblicazione". (Lo faccio a volte per assicurarmi che non siamo inconsapevolmente ancora dipendenti dai file che sono stati rimossi dal progetto ma sono ancora in sospeso sul server.)

Se qualcuno accede al sito prima che tutti i file JS / CSS richiesti vengano ridistribuiti, verrà avviato Application_Starte RegisterBundlesciò non riuscirà a costruire correttamente i pacchetti e genererà questa eccezione.

Ma quando ottieni questa eccezione e vai a controllare il server, tutti i file necessari sono esattamente dove dovrebbero essere!

Tuttavia, l'applicazione continua felicemente a servire il sito, generando 404 per qualsiasi richiesta di bundle, insieme alle pagine non stilate / non funzionali che ne derivano, e non tenta mai di ricostruire i bundle anche dopo che i file JS / CSS necessari sono ora disponibili.

Una nuova distribuzione che utilizza "Sostituisci i file corrispondenti con copie locali" attiverà l'app per riavviare e questa volta registrare correttamente i pacchetti.


1

Questo potrebbe essere un vecchio problema Ho un errore simile e nel mio caso era la cartella Scripts nascosta nella mia cartella Models. La traccia dello stack dice chiaramente la sua directory mancante e per impostazione predefinita tutti gli script Java dovrebbero essere nella cartella degli script. Questo potrebbe non essere applicabile agli utenti di cui sopra.


1

Avevo creato una nuova Angularapplicazione e scritto

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

ma avevo creato no services, quindi la servicescartella non è stata distribuita in pubblicazione poiché era vuota. Sfortunatamente, devi inserire un file fittizio in una cartella vuota per poterlo pubblicare

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

Anch'io ho affrontato lo stesso problema. Passato al percorso del file sotto Script Folder, copiato il nome esatto del file e apportato modifiche in bundle.cs:

Vecchio codice: //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-*"));

    }
}

Nuovo codice:

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

Ho riscontrato questo problema quando ho aperto un progetto VS2017 in VS2015, ho creato la soluzione e quindi ho caricato le DLL.

Ricostruirlo in VS2017 e ricaricare le DLL ha risolto il problema.


0

Ho la stessa domanda! Sembra che con IIS Express. Cambio l'URL di IIS Express per Project Like:

"http://localhost:3555/"

poi il problema è andato.


0

Il mio problema era che il mio sito non aveva file da raggruppare. Tuttavia, avevo creato il sito con un modello MVC, che include gli script jQuery. Il bundle.config faceva riferimento a quei file e alle loro cartelle. Non avendo bisogno degli script, li ho cancellati. Dopo aver modificato il bundle.config, tutto andava bene.


0

Tutto stava funzionando bene, quindi mentre si apportano modifiche non correlate e nella build successiva si è verificato lo stesso problema. Ho utilizzato il controllo del codice sorgente per confrontare le versioni precedenti e ho scoperto che la mia cartella ../Content/Scripts era stata misteriosamente svuotata!

Ripristinato ../Content/Scripts/*.* da un backup e tutto ha funzionato bene!

ps: Utilizzando VS2012, MVC4, ha recentemente aggiornato alcuni pacchetti NuGet, quindi questo potrebbe aver avuto un ruolo nel problema, ma tutto ha funzionato bene per un po 'dopo l'aggiornamento, quindi non sono sicuro.


0

guarda nel tuo file BundleConfig.cs per le righe che invoca IncludeDirectory ()

vale a dire:

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

la mia directory Grid non esisteva.


0

Ho anche riscontrato questo errore quando ho unito tutti i miei bundle separati in un unico bundle.

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

Cambiato in

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

Ho dovuto aggiornare il pool di applicazioni sul pannello di controllo del mio hosting condiviso per risolvere questo problema.


0

La rimozione di queste righe di codice dal file di classe bundleConfig.cs ha risolto la mia sfida:

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

0

Nessuna di queste risposte mi ha aiutato da quando ho creato i miei jsxfile in un modo strano. Il mio codice funzionava in modalità localhost ma non è riuscito in produzione.

La soluzione per me era entrare nel csprojfile e modificare i percorsi dei file da <None ...a<Content ...


0

Fondamentalmente la traccia dello stack ti dà il posto esatto (come evidenziato nello screenshot) in cui devi rimuovere la risorsa inesistente.

immagine che mostra la traccia dello stack

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.