7

테마에 스타일 번들을 사용하는 asp.net MVC4 웹 응용 프로그램이 있습니다. 나는 같은 물리적 테마 폴더 구조를 가지고 있습니다 ...Application_Start가 발생한 후에 어떻게 번들을 동적으로 추가 할 수 있습니까?

Themes\ 
    _Base\ 
    Theme1\ 
    Theme2\ 
    ...\ 

각 테마 폴더에는 임의의 개수의 LESS 파일이 있습니다. 내 BundleConfig.RegisterBundles 방법에서는, 나는 각 주제 폴더를 통해 반복하고 각각에 대한 번들을 만드는 몇 가지 논리가 있습니다. System.Web.Optimization의 번들링 메커니즘은 기존 번들에있는 파일 및 폴더 내의 변경 사항을 확인하고 올바르게 작동하는 번들 캐시를 플러시합니다.

그러나 필요한 것은 새 테마 폴더 (예 : Theme3\)를 내 Themes 루트 폴더에 복사하고 응용 프로그램에서 처음으로 다시 시작하지 않고 인식하도록하는 방법입니다. 모든 폴더의 모든 파일을 참조하는 "더미"번들을 만들려고했습니다 ...

var changeTracking = new StyleBundle(BUNDLE_ROOT); 
changeTracking.Transforms.Clear(); 
changeTracking.IncludeDirectory(THEME_ROOT, "*.less", true); 
changeTracking.Transforms.Add(new LessTransform()); 
changeTracking.Transforms.Add(new CssMinify()); 
bundles.Add(changeTracking); 

...하지만 도움이되지 않습니다. Theme3\을 만들면 BundleConfig.RegisterBundles으로 또 다른 호출이 발생하지 않습니다. 나는 여전히 IISRESET을해야하고, 새로운 테마가 인식되도록 응용 프로그램 풀을 재활용해야한다.

Application_Start가 발생한 후에 동적으로 번들을 추가 할 수있는 방법이 있습니까?

답변

4

이것은 우리가 명시 적으로 지원하려고 시도하지는 않았지만 모든 번들이 앱이 시작되기 전에 등록된다는 것이 예상됩니다. 그렇지 않으면 일부 번들이 모든 서버에 존재하지 않는 웹 팜 시나리오에서 문제가 발생하여 404가됩니다.

번들 캐시 종속성은 ASP.NET 캐시의 오래된 응답을 플러시 처리하지만 global.asax에서 호출되는 RegisterBundles에 대한 다른 호출을 트리거하지 않으며 응용 프로그램 재생 중에 만 호출됩니다 너 언급 했어.

+0

감사합니다. 하오. 캐시를 수동으로 플러시 할 수있는 방법이 있습니까 (아마도 http://stackoverflow.com/questions/12317391/how-to-force-bundlecollection-to-flush-cached-script-bundles-in-mvc4와 유사). 앱이 실행되는 동안 번들을 다시 빌드하도록 강제 하시겠습니까? – racingcow

+0

글쎄, 당신은 번들의 이러한 속성들 중 어떤 것에 대해서도, Orderer/Builder/EnableFileExtensionReplacements와 같은 no-op 세트를 사용하여이 작업을 수행 할 수 있습니다. 기본적으로 bundle.Orderer = bundle.Orderer를 수행하면 플래시가 발생합니다. –

+0

어쩌면 "번들 다시 작성"대신 "Register RegisterBundles"라고 말 했어야합니다. 기존 번들의 파일을 새로 고치는 대신 새 파일을 추가하려고합니다. – racingcow