CẬP NHẬT: Phiên bản trước không hoạt động trên Azure, tôi đã đơn giản hóa và sửa chữa bên dưới. (Lưu ý, để làm việc này trong chế độ phát triển với IIS Express, bạn sẽ cần phải cài đặt URL Rewrite 2.0 từ Microsoft http://www.iis.net/downloads/microsoft/url-rewrite - nó sử dụng trình cài đặt WebPi, đảm bảo đóng Visual Studio trước)
Nếu bạn muốn thay đổi tên thật của các tệp, thay vì thêm một chuỗi truy vấn (một số proxy/trình duyệt bị bỏ qua cho các tệp tĩnh) Bạn có thể làm theo các bước sau: (Tôi biết đây là một bài đăng cũ, nhưng tôi đã chạy qua nó trong khi phát triển một giải pháp :
làm thế nào để làm điều đó: Auto-increment phiên bản lắp ráp mỗi khi dự án được xây dựng và sử dụng con số đó cho một tập tin tĩnh chuyển trên tái cụ thể các nguồn bạn muốn tiếp tục làm mới. (do đó, something.js được bao gồm dưới dạng something.v1234.js với 1234 tự động thay đổi mỗi khi dự án được xây dựng) - Tôi cũng đã thêm một số chức năng bổ sung để đảm bảo rằng các tệp .min.js được sử dụng trong các tệp sản xuất và tệp thường xuyên được sử dụng Khi gỡ lỗi (Tôi đang sử dụng WebGrease để tự động hóa quá trình rút gọn) Một điều tốt đẹp về giải pháp này là nó hoạt động ở chế độ cục bộ/dev cũng như sản xuất. (Tôi đang sử dụng Visual Studio 2015/Net 4.6, nhưng tôi tin rằng điều này sẽ làm việc trong các phiên bản trước đó cũng
Bước 1:. Enable auto-increment về lắp ráp khi xây dựng Trong tập tin AssemblyInfo.cs (tìm thấy theo "thuộc tính" của dự án của bạn thay đổi những dòng sau:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
để
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
Bước 2: Thiết lập url REW rite trong web.config cho các tệp có sên phiên bản được nhúng (xem bước 3)
Trong web.config (phần chính cho dự án) thêm các quy tắc sau vào phần <system.webServer>
Tôi đặt trực tiếp sau thẻ kết thúc </httpProtocol>
.
<rewrite>
<rules>
<rule name="static-autoversion">
<match url="^(.*)([.]v[0-9]+)([.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
<rule name="static-autoversion-min">
<match url="^(.*)([.]v[0-9]+)([.]min[.](js|css))$" />
<action type="Rewrite" url="{R:1}{R:3}" />
</rule>
</rules>
</rewrite>
Bước 3: Biến Cài đặt ứng dụng để đọc phiên bản lắp ráp hiện tại của bạn và tạo sên phiên bản trong js của bạn và các tập tin css.
trong Global.asax.cs (tìm thấy trong thư mục gốc của dự án) thêm đoạn mã sau vào protected void Application_Start() (sau khi các dòng Register)
// setup application variables to write versions in razor (including .min extension when not debugging)
string addMin = ".min";
if (System.Diagnostics.Debugger.IsAttached) { addMin = ""; } // don't use minified files when executing locally
Application["JSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.','0') + addMin + ".js";
Application["CSSVer"] = "v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.', '0') + addMin + ".css";
Bước 4: Thay đổi liên kết src trong Razor xem bằng cách sử dụng các biến ứng dụng chúng tôi thiết lập trong Global.asax.cs
@HttpContext.Current.Application["CSSVer"]
@HttpContext.Current.Application["JSVer"]
Ví dụ, trong _Layout.cshtml của tôi, trong phần đầu của tôi, tôi có khối mã sau đây cho stylesheets:
<!-- Load all stylesheets -->
<link rel='stylesheet' href='https://fontastic.s3.amazonaws.com/8NNKTYdfdJLQS3D4kHqhLT/icons.css' />
<link rel='stylesheet' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
<link rel='stylesheet' media='(min-width: 700px)' href='/Content/css/[email protected]["CSSVer"]' />
@RenderSection("PageCSS", required: false)
Một vài điều cần lưu ý ở đây: 1) có không có phần mở rộng trên tệp. 2) cũng không có .min. Cả hai đều được xử lý bởi các mã trong Global.asax.cs
Tương tự như vậy, (cũng trong _Layout.cs) trong phần của tôi javascript: Tôi có đoạn mã sau:
<script src="~/Scripts/all3bnd100.min.js" type="text/javascript"></script>
<script src="~/Scripts/[email protected]["JSVer"]" type="text/javascript"></script>
@RenderSection("scripts", required: false)
Các tập tin đầu tiên là một bó của tất cả thư viện của bên thứ ba mà tôi đã tạo theo cách thủ công với WebGrease. Nếu tôi thêm hoặc thay đổi bất kỳ tệp nào trong gói (hiếm khi xảy ra) thì tôi đổi tên tệp theo cách thủ công thành all3bnd101.min.js, all3bnd102.min.js, v.v. Tệp này không khớp với trình xử lý ghi đè, vì vậy sẽ vẫn được lưu trong bộ nhớ cache trên trình duyệt của khách hàng cho đến khi bạn đóng gói lại/thay đổi tên theo cách thủ công.
Tệp thứ hai là ui.js (tệp này sẽ được viết dưới dạng ui.v12345123.js hoặc ui.v12345123.min.js tùy thuộc vào việc bạn đang chạy trong chế độ gỡ lỗi hay không) Điều này sẽ được xử lý/viết lại. (Bạn có thể đặt một breakpoint trong Application_OnBeginRequest của Global.asax.cs để xem nó hoạt động)
thảo luận đầy đủ về vấn đề này tại địa chỉ: Simplified Auto-Versioning of Javascript/CSS in ASP.NET MVC 5 to stop caching issues (works in Azure and Locally) With or Without URL Rewrite(trong đó có một cách để làm điều đó KHÔNG URL Rewrite)
Thành thực mà nói, nếu bạn đang nhóm thì mọi tệp SINGLE sẽ có nghĩa là, các tệp được nén 2-5 được rút gọn. Tôi nghĩ đó là một giải pháp âm thanh. – Worthy7