2009-12-15 6 views
1

내 CSS 및 자바 스크립트 파일을 장래의 헤더에 제공하고 해당 URL을 참조하는 URL에 토큰을 추가하고 싶습니다. 그런 식으로 브라우저는 CSS와 자바 스크립트를 다시 다운로드 할 필요가 없다. 이 타임 스탬프를 추가 할 수 있도록 코드에 빌드 타임 스탬프 전달

http://example.com/css/styles.css?build=23424

어떻게 내 코드 숨김에 빌드 번호 또는 타임 스탬프를 전달할 수 있습니다?

분명히 C#에는 C/C++에서 사용할 매크로가 없습니다.

새로운 빌드를 만들 때마다 브라우저에서 자산을 다운로드하도록 강요합니다. 빌드가 자산을 변경하는지 여부에 관계없이 강제로 다운로드해야합니다. 그러나 개별 파일 수정 시간을 보면서 고급 기능을 구현하기 전에 간단한 계획을 세우고 싶습니다.

답변

2

다음은 응용 프로그램 시작시 현재 어셈블리에서 빌드 ID를 추출하는 데 사용하는 코드입니다. 웹 구성에서 버전 지정자 (dev/qa/blank) 인 어셈블리에서 버전 번호를 읽은 다음 응용 프로그램에 들어갈 버전 번호 문자열을 만듭니다. 이 코드는 Global.asax.cs에 있습니다. 그런 다음 Application 인스턴스의 마크 업에서이를 참조 할 수 있습니다.

var webAssembly = Assembly.GetAssembly(typeof(...known class...)); 
var designator = WebConfigurationManager.AppSettings["VersionDesignator"]; 
string version = webAssembly.GetName().Version + designator; 
this.Application.Add("Version", version); 

다음은 (미안 해요 어떤 웹폼 사례가없는)는 MVC 컨텍스트에서 사용할 수있는 방법의 예입니다.

<link type="text/css" rel="stylesheet" 
     href="/Content/styles/screen.css?build=<%= this.Application["Version"] %>" /> 
2

흥미로운 아이디어.

  1. 이 프로젝트의 속성 폴더 아래의 AssemblyInfo.cs 클래스로 이동

    여기에 그것을 할 수있는 한 가지 방법입니다.

  2. 스타 와일드 카드를 포함하도록 어셈블리 버전을 변경하십시오. [assembly : AssemblyVersion ("1.0. *")].

이 _

var buildNumber = Assembly.GetExecutingAssembly().GetName().Version.Build; 

_이

그것 뿐이다

이 작업을 완료 : 코드에서

  • , 당신은이 같은 현재 빌드 버전을 검색 할 수 있습니다.

    AssemblyVersion을 1.0. *로 변경하면 Visual Studio/MSBuild가 빌드마다 자동으로 빌드 번호를 증가시킵니다. 그런 다음 위 코드 스 니펫을 사용하여 런타임에이 빌드 번호에 액세스 할 수 있습니다. 치즈처럼 쉽습니다.

  • +0

    이렇게 할 이유가 없습니다. 자동 증분 빌드 번호가이 인스턴스의 하드 세트 번호와 다른 것은 아닙니다. 빌드 누버를 그대로 두는 것이 더 쉬울 것이고 필요할 때 buildNumber 속성을 사용하면됩니다. –

    +0

    하드 세트 번호를 수동으로 증가시켜야합니다. –

    0

    브라우저와 서버는 HTTP를 통한 캐싱을 처리하는 방법을 알고 있습니다. 그래서 저는 이런 종류의 캐싱을 제공하면서 무엇을 성취하려고하는지 오해합니다. 최근에 본 브라우저는 CSS와 Javascript를 다시 다운로드하지 않습니다. 서버에서 새 빌드를 수행하면 다시 다운로드됩니다. 캐시 제어 및 만료 등과 같은 캐시 헤더를 참조하십시오. 자습서가 있습니다. http://www.mnot.net/cache_docs/