ディレクトリが存在しません。パラメーター名:directoryVirtualPath


115

Arvixeのホストにプロジェクトを公開したところ、このエラーが発生しました(ローカルで正常に機能します)。

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

どういう意味ですか ?

回答:


229

同じ問題があり、{version}と*のワイルドカードを使用して、存在しないファイルを指すバンドルがいくつかあることがわかりました。

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

私はそれらすべてを削除し、エラーはなくなりました。


2
これが「驚くほどあいまい」であるか、見つけるのが難しいかはわかりません。スタックトレースBundleConfig.RegisterBundlesは、Application_StartMy +1 からの呼び出しを直接指すので、代わりに@ user2465004の回答に移動します。
CrazyPyro

3
バンドルで参照されている/ scripts /フォルダーがサーバーに存在しないため、同じエラーが発生しました。
user1616625 14

私はasp.net mvcプロジェクトをweb apiに変換しましたが、実際にはjquery、cssファイルを使用していませんでした。私はあなたの投稿を見つけてうれしいです。それを修正し、すべてが正常に動作しています。
Sam

3
これに加えて、Azureに公開するときに、空のフォルダーを公開できないようです。.IncludeDirectory( "〜/ Scripts / Create / Controllers"、 "* .js")ステートメントがあり、Controllersフォルダーは確かに存在していましたが、実際にはまだ何も含まれていなかったため、同じエラーが発生しました。フォルダーに空のテキストファイルを置くだけで機能しました。
RamblerToning April

これは、バンドル構成に空のディレクトリが含まれていて、将来ファイルを追加する予定だったときに起こりました。それらのディレクトリが存在するため、すべてがローカルで問題ありませんでしたが、Azureにプッシュしたときに作成されませんでした
JMK

16

私はこれと同じ問題を抱えていましたが、コードの問題ではありませんでした。公開オプション(FTPのオプションではない)を使用していて、Visual Studioがスクリプト/ cssの一部をAzureサーバーにアップロードしていなかった。つまり、ファイルはハードドライブにあったため、ローカルでは問題なく動作しました。私のケースでこの問題を解決したのは、「プロジェクト>すべてのファイルを表示...」で、含まれていないファイルを右クリックし、それらを含めて、もう一度公開しました。


+1これは承認されたものよりもはるかに優れた答えであり、おそらくそれにマージする必要があります。「ファイル/ディレクトリが見つかりません」に応じて行う最初の論理的なことはすでに存在することを確認することです。しかし、この状況では、チェックするだけでサーバー上ではなくローカルに存在するので、少しこっそりです。さらに奇妙な状況については、私の答えを参照してください。
CrazyPyro

私もこの問題を抱えていました。ローカルボックスからの展開は機能しましたが、ビルドサーバーからの展開は機能しませんでした。ビルドサーバーには、TypeScriptコンパイラーによって生成された.jsファイルがパッケージに含まれていないことがわかりました。おそらく、ビルドサーバー上の古いバージョンのTypeScriptツールです。簡単な修正として、プロジェクトに.jsファイルを含めました。
スティムス2014年

私にとっては、ファイルのデプロイに使用されるBitTorrent Syncの問題でした。いくつかのファイルが単にいくつかの不具合が原因で展開されていなかった...
フィリップ

10

これを簡単にするために私が書いた簡単なクラスを次に示します。

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

これを使用するには、次のように、コードでScriptBundleをBundleRelaxedに置き換えるだけです。

        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
良い例-ここでの唯一の落とし穴は、使用している可能性のある拡張機能をHostingEnvironment.MapPath考慮していないことBundleTable.VirtualPathProviderです(デフォルトではない可能性がありますHostingEnvironment.VirtualPathProvider)。この場合、上記の例をBundleTable.VirtualPathProvider.DirectoryExistsand を使用するように変換しますBundleTable.VirtualPathProvider.GetDirectoryファイルパターン検索は少し問題になりますが、開始するのに適しています。
SliverNinja-MSFT 2016年

これで問題が解決しました。まだ問題のバンドルが誰であるかを理解していません。この強力なコードサンプルをありがとう、あなたは今日の午後のさらなる悪化から私を救いました。
Don Rolling

3

今日同じ問題に遭遇しましたが、実際には〜/ Scriptsの下にあるファイルの一部が公開されていないことがわかりました。不足しているファイルを公開した後、問題は解決しました


2

bundles.configファイルに存在しないディレクトリがあるため、このエラーも発生しました。これを変更する:

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

これに:

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

私のために問題を解決してください。


2

@JerSchneidと同様に、私の問題は空のディレクトリでしたが、私の展開プロセスはOPとは異なりました。Azure(Kuduを使用)でgitベースのデプロイを行っていましたが、gitのリポジトリに空のディレクトリが含まれていないことに気付きませんでした。https://stackoverflow.com/a/115992/1876622を参照してください

だから私のローカルフォルダ構造は:

[プロジェクトルート] / Content / jquery-plugins //ファイルがあった

[プロジェクトルート] / Scripts / jquery-plugins //ファイルがあった

[プロジェクトルート] / Scripts / misc-plugins //空のフォルダー

リモートサーバー上の私のリポジトリのクローン/プルは空のディレクトリを取得していませんでしたが、

[プロジェクトルート] / Content / jquery-plugins //ファイルがあった

[プロジェクトルート] / Scripts / jquery-plugins //ファイルがあった

これを修正する最善の方法は、空のディレクトリに.keepファイルを作成することです。このSOソリューションを参照してください:https : //stackoverflow.com/a/21422128/1876622


2

同じ問題がありました。私の場合の問題は、すべてのbootstrap / jqueriesスクリプトを含むスクリプトのフォルダーがwwwrootフォルダーにないことでした。スクリプトのフォルダーをwwwrootに追加すると、エラーは発生しなくなりました。


1

これは、展開中の競合状態によっても発生する可能性があります。

Visual Studioの「パブリッシュ」を使用してネットワークファイル共有経由でデプロイする場合は、「パブリッシュ前に既存のファイルをすべて削除する」にチェックを入れます。(これは、プロジェクトから削除されたがサーバー上でハングアウトしているファイルに無意識のうちに依存していないことを確認するためにときどき行います。)

必要なJS / CSSファイルがすべて再デプロイされる前に誰かがサイトにアクセスすると、サイトが起動Application_StartRegisterBundles、バンドルが正しく構築されず、この例外がスローされます。

しかし、この例外が発生してサーバーをチェックするときまでに、必要なすべてのファイルが適切な場所にあります。

ただし、アプリケーションは引き続きサイトにサービスを提供し、バンドルリクエストに対して404を生成します。これにより、スタイルが設定されていない、機能しないページが生成され、必要なJS / CSSファイルが利用可能になった後でも、バンドルの再構築は行われません。

「一致するファイルをローカルコピーで置き換える」を使用して再デプロイすると、アプリが再起動され、今回はバンドルが適切に登録されます。


1

これは古い問題である可能性があります。同様のエラーが発生し、私の場合、モデルフォルダにスクリプトフォルダが隠れていました。スタックトレースは、不足しているディレクトリを明確に示しており、デフォルトでは、すべてのJavaスクリプトはScriptsフォルダーにあるはずです。これは、上記のユーザーには適用されない場合があります。


1

新しいAngularアプリケーションを作成して書いた

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

しかし、私はnoを作成していたservicesため、servicesフォルダーは空であったため、公開時にデプロイされませんでした。残念ながら、公開するには、空のフォルダ内にダミーファイルを配置する必要があります。

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

私も同じ問題に直面しました。Script Folderの下のファイルパスを参照します。正確なファイル名をコピーしてbundle.csに変更を加えました。

古いコード://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-*"));

    }
}

新しいコード:

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

VS2015でVS2017プロジェクトを開き、ソリューションをビルドしてからDLLをアップロードしたときに、この問題が発生しました。

VS2017で再ビルドし、DLLを再アップロードすると、問題が修正されました。


0

私は同じ質問を受けました!IIS Expressのようです。プロジェクトのようにIIS ExpressのURLを変更します。

"http://localhost:3555/"

その後、問題はなくなりました。


0

私の問題は、私のサイトにバンドルするファイルがないということでした。ただし、jQueryスクリプトを含むMVCテンプレートを使用してサイトを作成しました。bundle.configは、それらのファイルとそのフォルダーを参照しました。スクリプトは必要ないので削除しました。bundle.configを編集した後、すべて良好でした。


0

すべてが問題なく機能し、その後、無関係な変更を加えている間に次のビルドで同じ問題が発生しました。ソース管理を使用して以前のバージョンと比較し、私の../Content/Scriptsフォルダーが不思議なことに空になったことを発見しました!

バックアップから../Content/Scripts/*.*を復元し、すべて正常に動作しました!

ps:VS2012を使用して、MVC4は最近いくつかのNuGetパッケージを更新していたため、問題の一部となった可能性がありますが、更新後しばらくの間はすべて正常に動作したため、確信が持てません。


0

呼び出す行については、BundleConfig.csファイルを調べてください。 IncludeDirectory()

つまり:

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

グリッドディレクトリが存在しませんでした。


0

分離したすべてのバンドルを1つのバンドルに結合したときにも、このエラーが発生しました。

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

に変更

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

この問題を解決するには、共有ホスティングのコントロールパネルでアプリケーションプール更新する必要がありました。


0

bundleConfig.csクラスファイルからこのコード行を削除すると、私の課題が解決しました。

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

0

jsx奇妙な方法でファイルを作成したため、これらの回答はどれも役に立ちませんでした。私のコードはlocalhostモードで動作していましたが、本番環境では失敗しました。

私にとっての修正は、csprojファイルに移動し、ファイルのパスをから<None ...に変更することでした<Content ...


0

基本的にスタックトレースは、存在しないリソースを削除する必要がある正確な場所(スクリーンショットで強調表示)を提供します。

スタックトレースを示す画像

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.