120

プロジェクトを 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

どういう意味ですか ?

4

20 に答える 20

237

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

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

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

于 2012-10-04T16:25:24.810 に答える
15

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

于 2014-01-27T05:25:09.467 に答える
2

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

したがって、私のローカルフォルダー構造は次のとおりです。

[Project Root]/Content/jquery-plugins // ファイルがありました

[Project Root]/Scripts/jquery-plugins // ファイルがありました

[Project Root]/Scripts/misc-plugins // 空のフォルダー

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

[Project Root]/Content/jquery-plugins // ファイルがありました

[Project Root]/Scripts/jquery-plugins // ファイルがありました

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

于 2014-09-23T12:30:08.473 に答える
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>

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

于 2014-01-17T09:11:35.033 に答える
2

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

于 2017-10-05T19:32:56.360 に答える
1

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

于 2016-01-07T04:11:30.640 に答える
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/

于 2016-03-24T20:59:00.837 に答える
1

私も同じ問題に直面しました。スクリプト フォルダーの下のファイル パスを参照します。正確なファイル名をコピーし、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"));
      }
}
于 2016-09-04T05:55:42.377 に答える
1

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

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

于 2017-08-11T14:46:46.797 に答える
0

すべてが正常に機能していましたが、無関係な変更を行っているときに、次のビルドで同じ問題が発生しました。ソース管理を使用して以前のバージョンと比較したところ、../Content/Scripts フォルダーが不思議なことに空になっていることがわかりました。

バックアップから ../Content/Scripts/*.* を復元し、すべてうまくいきました!

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

于 2016-03-27T18:26:05.853 に答える
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"));

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

于 2017-07-08T21:36:56.550 に答える