디렉토리가 없습니다. 매개 변수 이름 : 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
이것이 "놀라 울 정도로 모호한"지 또는 찾기 어려운지 확실하지 않습니다. stacktrace BundleConfig.RegisterBundlesApplication_StartMy +1 의 호출로 바로 연결되며 대신 @ user2465004의 답변으로 이동합니다.
CrazyPyro 2014

3
내 번들에 참조 된 / scripts / 폴더가 내 서버에 존재하지 않기 때문에 동일한 오류가 발생했습니다.
user1616625 15:08에

나는 asp.net mvc 프로젝트를 웹 API로 변환했고 실제로 jquery, css 파일을 사용하지 않았습니다. 귀하의 게시물을 찾았습니다. 그것을 고쳤고 모든 것이 잘 작동합니다.
Sam

3
이 외에도 Azure에 게시 할 때 빈 폴더를 게시 할 수없는 것 같습니다. .IncludeDirectory ( "~ / Scripts / Create / Controllers", "* .js") 문이 있었고 Controllers 폴더가 실제로 존재하는 동안 실제로 아직 아무것도 포함하지 않았고 이로 인해 동일한 오류가 발생했습니다. 빈 텍스트 파일을 폴더에 넣으면 작동합니다.
RamblerToning 2015

번들 구성에 빈 디렉터리가 포함되어있을 때 이런 일이 발생했습니다. 나중에 파일을 추가 할 계획이었습니다. 이러한 디렉터리가 존재했기 때문에 로컬에서 모든 것이 잘되었지만 Azure로 푸시했을 때 생성되지 않았습니다.
JMK

16

나는 똑같은 문제가 있었고 코드 문제가 아닙니다. 게시 옵션 (FTP 아님)을 사용하고 있었고 Visual Studio는 일부 스크립트 / css가 "내 프로젝트에 포함"되지 않았기 때문에 azure 서버에 업로드하지 않았습니다. 그래서 로컬에서는 파일이 내 하드 드라이브에 있었기 때문에 잘 작동했습니다. 제 경우에이 문제를 해결 한 것은 "프로젝트> 모든 파일 표시 ..."였습니다. 포함되지 않은 파일을 마우스 오른쪽 버튼으로 클릭하고 포함하고 다시 게시합니다.


+1 이것은 받아 들여진 것보다 훨씬 더 나은 대답이며, 아마도 그것과 합쳐 져야합니다. "파일 / 디렉토리를 찾을 수 없음"에 대한 응답으로해야 할 첫 번째 논리적 일은 이미 존재하는지 확인하는 것입니다. 그러나이 상황에서는 서버가 아닌 로컬에 존재하기 때문에 약간 더 은밀합니다. 더 이상한 상황에 대해서는 내 대답을 참조하십시오.
CrazyPyro 2014

나는 또한이 문제가 있었다. 내 로컬 상자에서 배포하는 것은 작동했지만 빌드 서버에서는 그렇지 않았습니다. 빌드 서버에는 TypeScript 컴파일러가 생성 한 .js 파일이 패키지에 포함되어 있지 않은 것으로 밝혀졌습니다. 빌드 서버에있는 이전 버전의 TypeScript 도구 일 수 있습니다. 빠른 수정으로 프로젝트에 .js 파일을 포함했습니다.
stimms

저에게는 파일 배포에 사용되는 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.DirectoryExists하고 BundleTable.VirtualPathProvider.GetDirectory. 파일 패턴 검색은 좀 더 문제가되지만 시작하기에 좋은 곳입니다.
SliverNinja-MSFT

이것은 나를 위해 문제를 해결했습니다. 문제가되는 번들이 누군지 아직 파악하지 못했습니다. 이 강력한 코드 샘플에 감사드립니다. 오늘 오후에 더 이상 악화되지 않도록 저를 구해 주셨습니다.
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와 달랐습니다. Kudu를 사용하는 Azure에서 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

나는 같은 문제가 있었다. 제 경우의 문제는 모든 부트 스트랩 / jqueries 스크립트가있는 스크립트 폴더가 wwwroot 폴더에 없다는 것입니다. 스크립트 폴더를 wwwroot에 추가하면 오류가 사라졌습니다.


1

배포 중 경쟁 조건으로 인해 발생할 수도 있습니다.

Visual Studio의 "게시"를 사용하여 네트워크 파일 공유를 통해 배포하고 "게시 전에 모든 기존 파일 삭제"를 선택하는 경우. (저는 가끔이 작업을 수행하여 프로젝트에서 제거되었지만 여전히 서버에 남아있는 파일에 무의식적으로 여전히 의존하지 않도록합니다.)

필요한 모든 JS / CSS 파일이 재배치되기 전에 누군가 사이트를 방문하면 시작 Application_Start되고 RegisterBundles번들을 제대로 구성하지 못하고이 예외가 발생합니다.

그러나이 예외가 발생하고 서버를 확인하면 필요한 모든 파일이 올바른 위치에 있습니다!

그러나 응용 프로그램은 계속해서 사이트를 제공하여 번들 요청에 대해 404를 생성하고 이로 인해 발생하는 스타일이 지정되지 않은 / 작동하지 않는 페이지를 생성하고 필요한 JS / CSS 파일을 사용할 수있는 후에도 번들을 다시 빌드하려고 시도하지 않습니다.

"일치하는 파일을 로컬 복사본으로 바꾸기"를 사용하여 재배포하면 앱이 다시 시작되고 이번에는 번들이 올바르게 등록됩니다.


1

이것은 오래된 문제 일 수 있습니다. 비슷한 오류가 있으며 제 경우에는 모델 폴더에 스크립트 폴더가 숨겨져 있습니다. 스택 추적은 누락 된 디렉토리를 명확하게 나타내며 기본적으로 모든 Java 스크립트는 스크립트 폴더에 있어야합니다. 위 사용자에게는 적용되지 않을 수 있습니다.


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

나도 같은 문제에 직면했습니다. 스크립트 폴더에서 파일 경로를 찾아 정확한 파일 이름을 복사하고 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/*.*를 복원했으며 모두 잘 작동했습니다!

추신 : VS2012, MVC4를 사용하여 최근에 일부 NuGet 패키지를 업데이트 했으므로 문제의 일부를 담당했을 수 있지만 업데이트 후 잠시 동안 모두 잘 실행되었으므로 확실하지 않습니다.


0

BundleConfig.cs 파일에서 IncludeDirectory () 를 호출하는 줄을 찾습니다.

즉 :

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

내 그리드 디렉토리가 없습니다.


0

분리 된 모든 번들을 하나의 번들로 결합 할 때도이 오류가 발생했습니다.

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.