7

저는 제 응용 프로그램을위한 ASP.NET MVC v4입니다. 웹 최적화 기능 (번들 및 스크립트 및 스타일 축소)을 사용하고 있습니다.asp.net mvc 번들 내용을 런타임에 동적으로 업데이트하는 방법이 있습니까?

자, 내가 이해하는 바는 (잘못된 것이 있으면 제발 수정하십시오), 최적화 프레임 워크는 컴파일 당시에 포함 된 파일을보고 구성 할 것입니다. 내용을 기준으로 버전 번호 (v = something)를 만듭니다. 내용이 변경 될 때마다 버전 해시가 다시 만들어지고 클라이언트는 업데이트 된 파일을 가져옵니다. 이제

,

[1] 내 서버에서의 js 파일 안에 뭔가를 업데이트하고 다시 구축하지 않고 클라이언트에 업데이트를 제공 & 응용 프로그램을 다시 시작이 완료 다음 얻을 수있는 방법이있다 (여기서는 번들 구성을 변경하지 않고 스크립트 내에서 파일 내용을 업데이트 만합니다)?

[2] 스크립트 구성 자체를 업데이트 (예 : 번들에 새 스크립트 추가)하고 다시 컴파일하지 않고 클라이언트에 제공하십시오. & 애플리케이션을 다시 시작 하시겠습니까? 아니면, 적어도 다시 컴파일하지 않고? (일반적으로 우리는 cs 파일 안에 번들을 정의하지만 출구가 있는지 궁금합니다!)

[3] 내 자신의 버전 번호를 사용하는 방법이 있습니까 (설정 파일에서 v = myCustomScriptVersion) 자동 생성 된 버전 해시 대신?

+0

번들은 컴파일 중에 구성되지 않으며 런타임시 Application_Start 중에 구성됩니다. – danludwig

+0

@danludwig, 번들 내용은 실제로 컴파일 타임에 정의됩니다. – haim770

+1

@ haim770 컴파일 타임에 정의되지만 런타임에 구성됩니다. Appplication_Start는 번들을 컬렉션에 추가하는 BundleConfig.RegisterBundles를 호출합니다. 이 코드는 런타임에 실행됩니다. – danludwig

답변

7

조금 늦었지만 여기서 내 자신의 경험을 공유하고 있습니다.

질문의 주석에서 설명한대로 번들은 cs 파일의 일부로 정의됩니다 (일반적으로 App_Start의 BundleConfig.cs). 따라서 번들은 컴파일시에 정의되며 응용 프로그램 시작시 컬렉션에 추가되어 사용 가능하게됩니다.

이제 흥미로운 비트. 런타임에 최적화 프레임 워크는 포함 된 파일을 조사하여 내용의 해시를 만들고이를 버전 쿼리 문자열로 번들 요청에 추가합니다. 따라서 번들이 호출 될 때 생성 된 URI는 다음과 같습니다.

http://example.com/Bundles/MyBundledScripts?v=ILpm9GTTPShzteCf85dcR4x0msPpku-QRNlggE42QN81

이 버전 번호는 V = ... 완전히 동적이다. 번들 내의 파일 내용이 변경되면이 버전이 다시 생성되며, 그렇지 않은 경우에는 그대로 유지됩니다.

지금 질문에 대답하기 위해,

[1]은 프레임 워크에 의해 자동으로 수행됩니다,이 여분의 아무것도 할 필요가 없습니다. 파일 내용이 변경 될 때마다 새 버전 번호가 생성되고 클라이언트는 업데이트 된 스크립트를 가져옵니다.

[2] 불가능합니다. 번들에 포함 된 파일이 변경되면 다시 컴파일해야합니다.

[3] 예, 사용할 수 있습니다. 다음과 같이 사용자 정의 버전 번호를 추가 할 수 있습니다.

@Scripts.Render("~/Bundles/MyBundledScripts?v=" + ConfigurationManager.AppSettings["ScriptVersion"]) 

그러나주의! 그러면 파일 내용을 기반으로 자동 버전이 제거됩니다.

그리고, 또한,이 같은 파일의 여러 버전을 사용할 수 있습니다 그리고 우리는 항상 다음과 같은 번들 구성에서 {버전} 와일드 카드를 포함하여 쉽게 달성 할 수있는 최신 버전을 포함 할 경우. /Scripts/Vendor 폴더에이 스크립트가있는 경우

bundles.Add(new ScriptBundle("~/Bundles/MyBundledScripts") 
      .Include(
       "~/Scripts/Vendor/someScript-{version}.js" 
      )); 

그래서, someScript는-2.3.js someScript-3.4.js

그런 다음 파일 someScript-3.4.js (상위 버전)이 자동으로 포함 얻을 것이다. 새 파일 someScript-4.0.js이 폴더에 추가되면 다시 컴파일/다시 시작할 필요없이 클라이언트에 제공됩니다.