2014-02-23 2 views
1

MVC에서 스크립트 번들 유틸리티를 사용하는 방법을 배우고 있는데 한 가지 문제점이 있습니다. 각 ScriptBundle의 가상 경로를 구조화하는 방법 사물. 하나는 CDN을 지정할 수있는 생성자를 사용하는 경우 예를 들어, 나는이 (가) BundleConfig 클래스에ASP.NEt MVC 스크립트 이해 번들링 경로 지정

BundleConfig.RegisterBundles(BundleTable.Bundles); 

후, 나는 호출 다음 한 Global.asax에있는

을 설정 다음 한 나는이

public static void RegisterBundles(BundleCollection bundles) 
{  
    //add link to jquery on the CDN 
    const string jqueryCdnPath = @"http://code.jquery.com/jquery-2.1.0.min.js"; 
    const string jqueryUiCdnPath = @"http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"; 
    const string jqueryColorCdnPath = @"http://code.jquery.com/color/jquery.color-2.1.2.min.js"; 
    var jqueryQunitCdnPath = @"http://code.jquery.com/qunit/qunit-1.14.0.js"; 

    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery", jqueryCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/jquery-{version}.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/ui", jqueryUiCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/ui/j-{version}/jquery-ui.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/color", jqueryColorCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/color/jquery.color-{version}.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/jqueryval") 
     .Include("~/Resources/Scripts/js/jquery.unobtrusive*", "~/Resources/Scripts/js/jquery.validate*")); 
} 

그러나 내 페이지를 빌드하고 실행하면 첫 번째 추가시 다음 오류 메시지가 나타납니다.

**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 File: c:\######.Web\App_Start\BundleConfig.cs Line: 30 

Stack Trace: 


[ArgumentException: Directory does not exist. 
Parameter name: directoryVirtualPath] 
    System.Web.Optimization.Bundle.Include(String virtualPath, IItemTransform[] transforms) +90 
    Network.Web.BundleConfig.RegisterBundles(BundleCollection bundles) inc:\######.Web.Web\App_Start\BundleConfig.cs:30 
    Network.Web.MvcApplication.Application_Start() in c:\######.Web\Global.asax.cs:27 

[HttpException (0x80004005): Directory does not exist. 
Parameter name: directoryVirtualPath] 
    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9936761 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296 

[HttpException (0x80004005): Directory does not exist. 
Parameter name: directoryVirtualPath] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9915300 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254** 

여기에 누락 된 구성 요구 사항이 있습니까? 내 경로가 잘못 포맷 되었습니까?

미리 도움을 주셔서 감사합니다.

+0

번들 및 축소 기능을 사용할 수 있습니까? 번들 및 축소는 Web.config 파일의 compilation 요소에 디버그 특성 값을 설정하여 활성화 또는 비활성화 할 수 있습니다. – SBirthare

+0

번들에 주석을 달아보십시오. 하나씩 문장을 추가하고이 오류를 나타내는 문장을 찾으십시오. CDN 경로가 올바른지, 이러한 진술 중 하나는 잘못된 로컬 경로를 참조합니다. – SBirthare

+0

이렇게하면 첫 번째 추가 명령문 만 전달되고 다른 모든 명령문은 실패합니다. 그래서 나는 다른 사람들에게 옳지 않은 첫 번째 것에 대해 그것이 옳을 수도있는 것을 이해하려고 노력하고 있습니다. – user272671

답변

0

번들의 디렉토리를 존재하지 않는 것으로 변경하십시오.

bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery", jqueryCdnPath 

나는 문제가 무엇인지 파악

bundles.Add(new ScriptBundle("~/BUNDLES/jquery", jqueryCdnPath) 
+0

나는 왜 내가 존재하지 않는 무언가로 그 디렉토리를 바꾸고 싶어하는지 알지 못한다. – user272671

+0

디렉토리가 존재하면 MVC는 기존 디렉토리에서 파일을 가져 오려고 시도하며 찾을 수 없습니다. 그래서 가상 경로를 주어야합니다. –

+0

오! 그러나 존재한다면 어떨까요? 그렇다면 MVC가 기존 파일을 사용해서는 안됩니까? 나는 이것이 정말로 어떻게 작동해야 하는지를 이해하려고 노력하고 있다고 생각하며, 실제 메커니즘을 많이 사용하지 않고 똑같은 예제를 게시하는 것으로 보이는 두 개의 블로그를 제외하고는 그다지 많은 부분이 보이지 않는다. – user272671

1

로 변경 될 수 있습니다. CDN을 사용할 때 bundlecollection이 include 디렉토리의 스펙을 좋아하지 않는 것 같습니다. 제거 된 추가 include 문을 제거한 후에는 문제가 사라졌습니다.

public static void RegisterBundles(BundleCollection bundles) 
{  
    //add link to jquery on the CDN 
    const string jqueryCdnPath = @"http://code.jquery.com/jquery-2.1.0.min.js"; 
    const string jqueryUiCdnPath = @"http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"; 
    const string jqueryColorCdnPath = @"http://code.jquery.com/color/jquery.color-2.1.2.min.js"; 
    var jqueryQunitCdnPath = @"http://code.jquery.com/qunit/qunit-1.14.0.js"; 

    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery", jqueryCdnPath)); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/ui", jqueryUiCdnPath)); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/color", jqueryColorCdnPath)); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/jqueryval") 
     .Include("~/Resources/Scripts/js/jquery.unobtrusive*", "~/Resources/Scripts/js/jquery.validate*")); 
} 

AFTER

public static void RegisterBundles(BundleCollection bundles) 
{  
    //add link to jquery on the CDN 
    const string jqueryCdnPath = @"http://code.jquery.com/jquery-2.1.0.min.js"; 
    const string jqueryUiCdnPath = @"http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"; 
    const string jqueryColorCdnPath = @"http://code.jquery.com/color/jquery.color-2.1.2.min.js"; 
    var jqueryQunitCdnPath = @"http://code.jquery.com/qunit/qunit-1.14.0.js"; 

    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery", jqueryCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/jquery-{version}.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/ui", jqueryUiCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/ui/j-{version}/jquery-ui.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/color", jqueryColorCdnPath) 
     .Include("~/Resources/Scripts/js/jquery/color/jquery.color-{version}.js")); 
    bundles.Add(new ScriptBundle("~/Resources/Scripts/js/jquery/jqueryval") 
     .Include("~/Resources/Scripts/js/jquery.unobtrusive*", "~/Resources/Scripts/js/jquery.validate*")); 
} 

전에 당신이 모든 로컬 파일 경로를 포함하여 귀찮게하지 마십시오 CDN을 사용하려면 지정할 때, 그것은 보인다.