MVC4 - 최적화가 true로 설정된 경우 번들링이 작동하지 않습니다.
제가 여기서 제대로 하지 못하는 게 뭔지 궁금합니다.ASP를 사용하고 있습니다.NET C# MVC4와 나는 새로운 css/js 최적화 기능을 사용하고 싶습니다.
여기 저의 HTML 파트입니다.
@Styles.Render("~/content/css")
제 입니다.BunduleConfig.cs
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
// BundleTable.EnableOptimizations = true;
출력(작동):
<link href="/content/css/reset.css" rel="stylesheet"/>
<link href="/content/css/bla.css" rel="stylesheet"/>
를 할 때는.BundleTable.EnableOptimizations = true;
은 이 다처럼 .
<link href="/content/css?v=5LoJebKvQJIN-fKjKYCg_ccvmBC_LF91jBasIpwtUcY1" rel="stylesheet"/>
그리고 여기는 당연히 404입니다.제가 어디서 뭘 잘못했는지 모르겠어요, MVC4와 처음으로 작업하는 거 도와주세요.
실제로 존재하지만 디렉토리인 가상 URL에 번들을 넣는 것이 문제라고 생각합니다.
MVC는 번들에서 가상 파일을 생성하고 번들 경로로 지정한 경로에서 해당 파일을 제공합니다.
이 문제에 대한 올바른 해결책은 기존 디렉토리에 직접 매핑되지 않고 해당 디렉토리 내에 가상 파일 이름(실제 파일 이름에도 매핑되지 않음)을 사용하는 번들 경로를 사용하는 것입니다.
예:
사이트에 /content/css라는 폴더가 있는 경우 다음과 같이 css 번들을 만듭니다.
BundleConfig.cs 에서:
bundles.Add(new StyleBundle("~/content/css/AllMyCss.css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
그리고 페이지에:
@Styles.Render("~/content/css/AllMyCss.css")
이것은 당신이 당신의 css 폴더에 AllMyCss.css라는 이름의 파일을 가지고 있지 않다고 가정합니다.
웹 최적화인지, 웹 그리스인지는 잘 모르겠지만 그 중 한 가지(또는 두 가지 모두)는 매우 신중해야 합니다.
우선 코드에 이상이 없습니다.
bundles.Add(new StyleBundle("~/content/css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
사실 이것이 바로 마이크로소프트가 하는 일입니다.그들이 사용하지 않는 주된 이유는~/bundles
CSS의 경우 상대적인 경로가 이미지에 대해 엉망이 되는 것입니다.브라우저가 번들을 어떻게 보는지 생각해 보십시오. 다른 URL을 보는 것과 정확히 동일한 방식으로, 모든 일반 경로 관련 규칙은 여전히 상대 경로에 적용됩니다.의 CSS가의 CSS요로 있다고 .../images/bullet.png
. 만약 당신이 사용하고 있다면~/bundles
입니다 입니다.bundles
실제로는 존재하지 않는 거죠아마 결국엔 그 안을 들여다보게 될 겁니다~/images
~/content/images
.
실제로 고장을 내고 404개의 오류를 발생시킬 수 있는 몇 가지를 발견했습니다.
- 제 는 : 입니다.
Content/CSS
images
CSS 이미지의 폴더입니다. - 있습니다
EnableOptimizations=true
합니다를 하는 동안 합니다. - 먼저 해야 할 일은 'View Source'이고 CSS 링크를 클릭하면 작동하는지 확인할 수 있습니다.
우리가 고양이에 관한 사이트를 개발하고 있다고 치자.당신은 이것을 가질 수 있습니다.
@Styles.Render("~/Content/css/cats.css") // dont do this - see below why
bundles.Add(new StyleBundle("~/content/css/cats.css").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
이렇게 하면 HTML에 있는 이 경로에 대한 CSS 링크가 생성됩니다.
/Content/css/cats.css?v=JMoJspikowDah2auGQBfQAWj1OShXxqAlXxhv_ZFVfQ1
그러나 확장자를 넣었더니 IIS가 혼동되어 404가 됩니다.
이렇게 변경하면 잘 작동합니다.
@Styles.Render("~/Content/css/cats")
bundles.Add(new StyleBundle("~/content/css/cats").Include(
"~/content/css/reset.css",
"~/content/css/bla.css"));
다른 사람들에 의해 이미 지적된 또 다른 문제는 당신이 하지 말아야 한다는 것입니다.
@Styles.Render("~/Content/css")
하지 않을 경우 CSS (가능하지 않을 경우 를입니다)라는 파일이 것입니다.css
없이)이)에서Content
디렉토리 입니다.
생성된 HTML에 버전 번호가 있는지 확인해야 하는 추가적인 방법이 있습니다.
<link href="/Content/css/cats?v=6GDW6wAXIN5DJCxVtIkkxLGpojoP-tBQiKgBTQMSlWw1" rel="stylesheet"/>
만약 그렇지 않고 이렇게 보인다면, 번들 테이블과 cshtml 파일 사이에 번들 이름과 정확히 일치하는 것이 없을 수도 있습니다.
<link href="/Content/css/cats" rel="stylesheet"/>
번들링 HttpModule이 있는지 확인하는 것을 잊지 마십시오.
<modules>
<remove name="BundleModule" />
<add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>
이것은 처음으로 따끔거렸습니다.NuGet 패키지에서 필요한 구성을 추가해야 하는지 확실하지 않지만, 제 경우에는 그렇지 않았습니다.
제가 보기엔 정확합니다.최적화를 사용하도록 설정하면 참조가 하나뿐이며 스타일 번들(/content/css)에서 지정한 이름에 대한 참조가 됩니다.디버그 모드(또는 웹 구성에서 debug= false를 사용하는 경우)에서는 최적화되지 않은 파일을 정상적으로 얻을 수 있습니다.보시면 입력하신 대로 그냥 단순한 텍스트로 되어 있습니다.그러나 최적화를 설정하면(일반적으로 릴리스 모드에서 실행할 때) 이상하게 보이는 URL이 대신 표시됩니다.
당신이 그것의 출력을 본다면 그것은 최소화 될 것입니다.쿼리 문자열 ?v=5KloJ...는 번들의 파일에 대해 취한 해시를 기반으로 합니다.이렇게 하면 원하는 기간 동안 안전하게 HTTP 캐시를 수행할 수 있습니다.당신이 원한다면 영원히요, 하지만 저는 디폴트가 1년이라고 생각합니다.그러나 스타일시트를 수정하면 새 해시가 생성되고 이는 "캐시 버스팅"되므로 브라우저에서 새 복사본을 얻을 수 있습니다.
그런데 왜 404를 받는지 모르겠네요.라우팅 구성이나 IIS 설정과 관련이 있는 것 같습니다.IIS Express와 함께 Visual Studio에서 실행 중입니까?
저도 방금 비슷한 문제를 해결했습니다.다를 했습니다. 제가 다음을 통해 '선택'을 설치했습니다.NuGet
. 그리고.BundleConfig
클래스, 포함된 라인.CSS
파일은 다음과 같습니다.
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css",));
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/chosen.css"));
그 학급 어딘가에 이런 줄이 있었습니다.
BundleTable.EnableOptimizations = true;
해결책은 두 개를 결합하는 것이었습니다.bundles.Add()
다음과 같습니다.
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/site.css",
"~/Content/chosen.css"
));
그리고 그것이 나를 위해 고쳤습니다.
어떠한 이유로 bundleconfig.json을 서버에 배포하지 않았기 때문일 수도 있습니다.
언급URL : https://stackoverflow.com/questions/12240097/mvc4-bundling-does-not-work-when-optimizations-are-set-to-true
'programing' 카테고리의 다른 글
자바 langNoSuchMethodException: userAuth.사용자.() (0) | 2023.09.25 |
---|---|
데이터 프레임의 모든 특정 값 바꾸기 (0) | 2023.09.25 |
다른 열을 기준으로 열을 변환하는 파워 쿼리 (0) | 2023.09.25 |
Jquery/PHP를 이용한 채팅방 구현 방법은? (0) | 2023.09.25 |
':' 문자(16진수 값 0x3A)는 이름에 포함할 수 없습니다. (0) | 2023.09.20 |