2012-10-25 5 views
6

내가 알 수있는 한 (System.Web.Optimization의 솔직한 문서가 매우 희소하기 때문에) ASP.NET에서 번들링이 작동하는 방법은 ScriptBundleStyleBundle에 해당하는 파일 세트 (자바 스크립트 또는 CSS)를 등록하고이를 연결하는 것입니다 가상 경로로; 예 : 모든 jQuery UI 스크립트에 대해 ~/bundles/jqueryui. 나중에 ASP.NET은 비 디버그 모드에서 실행 중일 때 이러한 파일을 축소 할 수 있으며 축소 된 버전은 번들에 대해 지정한 가상 경로에서 사용할 수있게됩니다.ASP.NET 번들 - 기본 가상 경로?

기본 번들 설정은 가상 경로로 ~/bundles/...이라는 일부 스크립트 번들을 등록하고 가상 경로로 ~/Content/css 인 일부 CSS를 등록합니다. 내 질문은,이게 모순이 아닌가? ~/bundles/js/...~/bundles/css/...과 같은 것이 더 적합하지 않습니까? 실제로 ~/Content 디렉토리는 실제로 실제 디렉토리로 존재하므로 이름 충돌의 가능성이 있습니다. 나는 가상 번들 경로가 이 아니고이 존재하지 않는 디렉토리가되고 실제 파일 시스템에 생성되지 않기를 바란다고 생각했다. ~/Content/css이 내가 이해하지 못하는 CSS 번들 가상 경로에 사용되는 이유가 있습니까?

답변

7

멋진 질문입니다. 단편적인 이야기는 일반적으로 전혀 중요하지 않다는 것입니다. 그러나 일부 스크립트 파일과 CSS는 상대 경로를 사용하여 다른 내용을 참조하기 때문에 디스크의 실제 위치에 의존합니다. 예를 들어, 새로운 ASP.NET 4.5 프로젝트의 기본 jQuery UI 번들을 살펴보면 다소 긴 경로가 있음을 알 수 있습니다. jQuery의 CSS는 일부 이미지 파일에 대한 상대 참조를 가지고 있기 때문입니다. 경로가 올바르게 해결되도록하려면 경로가 중요해야합니다. 그렇지 않으면 ".."와 같은 항목이 올바른 상위 디렉토리로 이동하지 않습니다.

+0

감사합니다.이 대답은 Microsoft가 그랬던 것 같아서 생각하지 않았습니다. 나는 ~/Content/cssBundles와'~/Content/jsBundles'와 같은 무언가의 기본 경로를 사용했다면 더 일관성이 있다고 생각합니다. – Jez

+0

@jez MVC 팀에서 Microsoft에서 일하므로 확실합니다. – Eilon

+0

이 문제를 해결하기 위해 CssUrlRewriteTransform이 있습니다. CSS 파일의 URL을 다시 작성하므로 원래 디렉토리가 아닌 가상 디렉토리에 상대적입니다. 그런 식으로 CSS 파일의 새 위치에도 불구하고 원래 디렉토리의 파일을 찾을 수 있습니다. – Triynko