Direktori tidak ada. Nama parameter: directoryVirtualPath

115

saya baru saja menerbitkan proyek saya ke host saya di Arvixe dan mendapatkan kesalahan ini (Bekerja dengan baik di lokal):

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

Apa artinya ?

BjarkeCK
sumber

Jawaban:

229

Saya memiliki masalah yang sama dan menemukan bahwa saya memiliki beberapa bundel yang mengarah ke file yang tidak ada menggunakan {version} dan * wildcard seperti

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

Saya menghapus semua itu dan kesalahannya hilang.

Martin Ørding-Thomsen
sumber
2
Tidak yakin bagaimana ini "sangat tidak jelas" atau sulit ditemukan; stacktrace mengarahkan Anda langsung ke BundleConfig.RegisterBundlespanggilan dari Application_Start+1 Saya malah beralih ke jawaban @ user2465004.
CrazyPyro
3
Saya menerima kesalahan yang sama karena / scripts / folder yang dirujuk dalam bundel saya tidak ada di server saya.
pengguna1616625
Saya mengonversi proyek mvc asp.net ke api web dan benar-benar tidak menggunakan jquery, file css. Senang saya menemukan postingan Anda. Perbaiki dan semuanya berfungsi dengan baik.
Sam
3
Selain itu, saat menerbitkan ke Azure, tampaknya Anda tidak mengizinkan Anda menerbitkan folder kosong. Saya memiliki pernyataan .IncludeDirectory ("~ / Scripts / Create / Controllers", "* .js"), dan meskipun folder Controllers memang ada, sebenarnya belum ada apa pun di dalamnya dan ini menyebabkan kesalahan yang sama. Saya hanya meletakkan file teks kosong di folder, dan kemudian berhasil.
RamblerToning
Ini terjadi pada saya ketika saya memiliki direktori kosong yang disertakan dalam konfigurasi bundel saya, yang saya rencanakan untuk menambahkan file ke dalamnya di masa mendatang. Semuanya baik-baik saja secara lokal karena direktori itu ada, tetapi ketika saya mendorong ke Azure, mereka tidak dibuat,
JMK
16

Saya memiliki masalah yang sama dan itu bukan masalah kode. Saya menggunakan opsi terbitkan (bukan yang FTP) dan Visual Studio tidak mengunggah beberapa skrip / css saya ke server biru karena mereka tidak "termasuk dalam proyek saya". Jadi, secara lokal itu berfungsi dengan baik, karena file ada di hard drive saya. Apa yang memecahkan masalah ini dalam kasus saya adalah "Proyek> Tampilkan semua file ..." dan klik kanan file yang tidak disertakan, sertakan dan publikasikan lagi

dsnunez.dll
sumber
+1 Ini adalah jawaban yang jauh lebih baik daripada yang diterima, dan mungkin harus digabungkan ke dalamnya. Karena hal logis pertama yang harus dilakukan dalam menanggapi "file / direktori tidak ditemukan" sudah memeriksa keberadaannya. Tetapi dalam situasi ini, ini sedikit lebih licik, karena Anda memeriksa dan itu ada secara lokal, hanya tidak di server. Untuk situasi yang lebih aneh lagi, lihat jawaban saya.
CrazyPyro
Saya juga mengalami masalah ini. Menerapkan dari kotak lokal saya berfungsi tetapi dari server build tidak. Ternyata build server tidak menyertakan file .js yang dibuat oleh compiler TypeScript dalam paket. Kemungkinan versi lama dari alat TypeScript di server build. Sebagai perbaikan cepat saya menyertakan file .js dalam proyek.
Stimms
Bagi saya itu masalah dengan BitTorrent Sync yang digunakan untuk menyebarkan file. Beberapa file tidak diterapkan karena beberapa kesalahan ..
Filip
10

Berikut adalah kelas singkat yang saya tulis untuk mempermudah.

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

Untuk menggunakannya, cukup ganti ScriptBundle dengan BundleRelaxed di kode Anda, seperti di:

        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")
            );
Barnabas Kendall
sumber
2
Contoh bagus - satu-satunya gotcha di sini adalah yang HostingEnvironment.MapPathtidak mempertimbangkan BundleTable.VirtualPathProviderekstensi yang mungkin Anda gunakan ( mungkin non-default dan bukanHostingEnvironment.VirtualPathProvider ). Untuk kasus ini, Anda ingin mengubah contoh di atas menjadi menggunakan BundleTable.VirtualPathProvider.DirectoryExistsdan BundleTable.VirtualPathProvider.GetDirectory. Pencarian Pola File menjadi sedikit lebih bermasalah, tetapi tempat yang baik untuk memulai.
SliverNinja - MSFT
Ini memperbaiki masalah saya. Masih belum tahu siapa bungkusan yang menyinggung itu. Terima kasih atas contoh kode yang kuat ini, Anda menyelamatkan saya dari kejengkelan lebih lanjut sore ini.
Don Rolling
3

Saya mengalami masalah yang sama hari ini, sebenarnya saya menemukan bahwa beberapa file di bawah ~ / Scripts tidak dipublikasikan. Masalah teratasi setelah saya menerbitkan file yang hilang

Naga
sumber
2

Saya juga mendapat kesalahan ini dengan memiliki direktori yang tidak ada di file bundles.config saya. Mengubah ini:

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

Untuk ini:

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

Pecahkan masalah untuk saya.

JerSchneid
sumber
2

Seperti @JerSchneid, masalah saya adalah direktori kosong, tetapi proses penerapan saya berbeda dari OP. Saya melakukan penerapan berbasis git di Azure (yang menggunakan Kudu), dan tidak menyadari bahwa git tidak menyertakan direktori kosong di repo. Lihat https://stackoverflow.com/a/115992/1876622

Jadi struktur folder lokal saya adalah:

[Project Root] / Content / jquery-plugins // memiliki file

[Project Root] / Scripts / jquery-plugins // memiliki file

[Project Root] / Scripts / misc-plugins // folder kosong

Sedangkan klon / tarik apa pun dari repositori saya di server jarak jauh tidak mendapatkan direktori kosong:

[Project Root] / Content / jquery-plugins // memiliki file

[Project Root] / Scripts / jquery-plugins // memiliki file

Pendekatan terbaik untuk memperbaikinya adalah dengan membuat file .keep di direktori kosong. Lihat solusi SO ini: https://stackoverflow.com/a/21422128/1876622

HeyZiko
sumber
2

Saya memiliki masalah yang sama. masalah dalam kasus saya adalah bahwa folder skrip dengan semua skrip bootstrap / jqueries tidak ada di folder wwwroot. setelah saya menambahkan folder skrip ke wwwroot, kesalahannya hilang.

rafaelzm2000.dll
sumber
1

Ini juga dapat disebabkan oleh kondisi balapan saat menerapkan:

Jika Anda menggunakan "Publikasikan" Visual Studio untuk menyebarkan melalui jaringan berbagi file, dan centang "Hapus semua file yang ada sebelum menerbitkan." (Saya melakukan ini kadang-kadang untuk memastikan bahwa kita secara tidak sadar masih bergantung pada file yang telah dihapus dari proyek tetapi masih nongkrong di server.)

Jika seseorang mengunjungi situs sebelum semua file JS / CSS yang diperlukan diterapkan kembali, itu akan dimulai Application_Startdan RegisterBundlesyang akan gagal untuk membuat bundel dengan benar dan memunculkan pengecualian ini.

Tetapi pada saat Anda mendapatkan pengecualian ini dan pergi memeriksa server, semua file yang diperlukan ada di tempat yang seharusnya!

Namun, aplikasi dengan senang hati terus melayani situs, menghasilkan 404 untuk permintaan bundel apa pun, bersama dengan halaman tidak bergaya / tidak berfungsi yang dihasilkan dari ini, dan tidak pernah mencoba untuk membangun kembali bundel bahkan setelah file JS / CSS yang diperlukan sekarang tersedia.

Penerapan ulang menggunakan "Ganti file yang cocok dengan salinan lokal" akan memicu aplikasi untuk memulai ulang dan mendaftarkan bundel dengan benar kali ini.

CrazyPyro
sumber
1

Ini mungkin masalah lama, saya memiliki kesalahan serupa dan dalam kasus saya itu adalah folder Skrip bersembunyi di Folder Model saya. Pelacakan tumpukan dengan jelas mengatakan Direktori yang hilang dan secara default semua Java Scripts harus ada di Folder Skrip. Ini mungkin tidak berlaku untuk pengguna di atas.

CuriousRK
sumber
1

Saya telah membuat Angularaplikasi baru dan menulis

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

tapi saya telah membuat tidak services, jadi servicesfolder tidak digunakan untuk mempublikasikan karena kosong. Sayangnya, Anda harus meletakkan file dummy di dalam folder kosong mana pun agar bisa dipublikasikan

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

tic
sumber
1

Saya juga menghadapi masalah yang sama. Menjelajah ke jalur file di bawah Folder Script. Menyalin nama file yang tepat dan membuat perubahan di bundle.cs:

Kode Lama: //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-*"));

    }
}

Kode Baru:

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"));
      }
}
Nair Adityan
sumber
1

Saya mengalami masalah ini ketika saya membuka proyek VS2017 di VS2015, membangun solusi dan kemudian mengunggah DLL.

Membangun kembali di VS2017 dan mengunggah ulang DLL memperbaiki masalah.

Steve Woods
sumber
0

Saya mendapat pertanyaan yang sama! Sepertinya dengan IIS Express. Saya mengubah URL IIS Express untuk Proyek Seperti:

"http://localhost:3555/"

lalu masalahnya hilang.

pengguna2320546
sumber
0

Masalah saya adalah bahwa situs saya tidak memiliki file untuk digabungkan. Namun, saya telah membuat situs dengan template MVC, yang menyertakan skrip jQuery. Bundle.config merujuk ke file tersebut dan foldernya. Tidak membutuhkan skrip, saya menghapusnya. Setelah mengedit bundle.config, semuanya baik-baik saja.

CraigP
sumber
0

Semua berfungsi dengan baik, lalu saat membuat perubahan yang tidak terkait dan pada build berikutnya menemukan masalah yang sama. Menggunakan kontrol sumber untuk membandingkan dengan versi sebelumnya dan menemukan bahwa folder ../Content/Scripts saya telah dikosongkan secara misterius!

Dipulihkan ../Content/Scripts/*.*dari cadangan dan semuanya bekerja dengan baik!

ps: Menggunakan VS2012, MVC4, baru-baru ini memperbarui beberapa paket NuGet, jadi itu mungkin telah memainkan beberapa bagian dalam masalah ini, tetapi semuanya berjalan dengan baik untuk beberapa saat setelah pembaruan, jadi tidak yakin.

nspire
sumber
0

lihat file BundleConfig.cs Anda untuk baris yang memanggil IncludeDirectory ()

yaitu:

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

direktori Grid saya tidak ada.

RolandoCC
sumber
0

Saya juga mengalami kesalahan ini ketika saya menggabungkan semua bundel saya yang terpisah menjadi satu bundel.

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

Berubah menjadi

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

Saya harus menyegarkan kumpulan aplikasi di panel kontrol hosting bersama saya untuk memperbaiki masalah ini.

rene anderson
sumber
0

Menghapus baris kode ini dari file kelas bundleConfig.cs menyelesaikan tantangan saya:

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

Tak satu pun dari jawaban ini membantu saya sejak saya membuat jsxfile dengan cara yang aneh. Kode saya berfungsi dalam mode localhost tetapi gagal dalam produksi.

Perbaikan bagi saya adalah masuk ke csprojfile dan mengubah jalur file dari <None ...menjadi<Content ...

JacobIRR
sumber
0

Pada dasarnya pelacakan tumpukan memberi Anda tempat yang tepat (seperti yang disorot dalam tangkapan layar) yang Anda perlukan untuk menghapus sumber daya yang tidak ada.

gambar menunjukkan jejak tumpukan

sandeep talabathula
sumber