Vsiual Studio MVC 為了JS CSS 更新問題 用目錄修改日期 當成 自動生成的版本號
VS2017 一般程式 自動生成不是問題
可是 MVC 網站怎麼弄呢?
先講為啥要版本號?
最主要 是 JS 跟 CSS 的更新問題
如果放在 BundleConfig 內
然後用
@Scripts.Render("~/bundles/自己造的集合")
是每次 VS 就會生成一個檔
就不怕 Web Html 端 沒更新到
但問題是 除錯時 就很麻煩
出問題時 並不會跳過去,而且需 "移至定義" 找那個function 時就會失效
所以除非以後都不會動了 或是 真正要發布時再這樣放
不然 除錯時 真的很麻煩
***************************************
問題來了 Web Html 端 用傳統的
<script src="~/Js/Myt.js"></script>
又會有更新問題 常常改老半天 還是錯誤
改到都懷疑人生 才發現要 按 F4
所以最好是 自己設一個版本 帶進去
<script src="~/Js/Myt.js?@MyClass.SysVer"></script>
問題還是得自己每次改版本 忘了就GG了
後來是 在 Startup.cs 內加行
MyClass.SysVer = string.Format("{0:MMddHHmmss}", NowDT);
用現在日期時間 變成編號
但是 網站 每次重啟動 都會更新一次 大家還是重下載一次
雖然OK但畢竟不是長久之計
*********************************
還是有編譯一次就自動產生一個 編號是最好
Google 老半天 還是都覺得麻煩.....不然就看不懂或試不出來..
最後是自己想了一個方法
找到這個專案的 專案名.DLL 檔 讀他的最後修改日期 當版本
怎麼做?
編譯好的 專案名.DLL 放在 \bin 內
所以
string App_Run_Path = System.AppDomain.CurrentDomain.BaseDirectory;
string DllName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string Fpath = App_Run_Path+@"\bin\"+DllName+".dll";//取得主 dll 檔 修改日期
//DateTime dt = File.GetLastWriteTime(Fpath);//取得 DLL 修改日期
//GetLastWriteTime 微軟說明 :傳回指定檔案或目錄上次被寫入的日期和時間。
//GetLastAccessTime微軟說明 :傳回指定檔案或目錄上次被存取的日期和時間。
DateTime dt = File.GetLastAccessTime(Fpath);
拿他當版本號,算是解決這問題
後來發現也是不行,因為如果主程式沒有改 單純只是修正 Js 或 Css
Dll 檔日期是不會變動的
又回到 原點
後來想想 我只是要 改過 Js 或 Css 就要有新編號....
所以 我將 會變動的 Js 跟 Css 都在一個目錄
然後用
Directory.
可是 MVC 網站怎麼弄呢?
先講為啥要版本號?
最主要 是 JS 跟 CSS 的更新問題
如果放在 BundleConfig 內
然後用
@Scripts.Render("~/bundles/自己造的集合")
是每次 VS 就會生成一個檔
就不怕 Web Html 端 沒更新到
但問題是 除錯時 就很麻煩
出問題時 並不會跳過去,而且需 "移至定義" 找那個function 時就會失效
所以除非以後都不會動了 或是 真正要發布時再這樣放
不然 除錯時 真的很麻煩
***************************************
問題來了 Web Html 端 用傳統的
<script src="~/Js/Myt.js"></script>
又會有更新問題 常常改老半天 還是錯誤
改到都懷疑人生 才發現要 按 F4
所以最好是 自己設一個版本 帶進去
<script src="~/Js/Myt.js?@MyClass.SysVer"></script>
問題還是得自己每次改版本 忘了就GG了
後來是 在 Startup.cs 內加行
MyClass.SysVer = string.Format("{0:MMddHHmmss}", NowDT);
用現在日期時間 變成編號
但是 網站 每次重啟動 都會更新一次 大家還是重下載一次
雖然OK但畢竟不是長久之計
*********************************
還是有編譯一次就自動產生一個 編號是最好
Google 老半天 還是都覺得麻煩.....不然就看不懂或試不出來..
最後是自己想了一個方法
找到這個專案的 專案名.DLL 檔 讀他的最後修改日期 當版本
怎麼做?
編譯好的 專案名.DLL 放在 \bin 內
所以
string App_Run_Path = System.AppDomain.CurrentDomain.BaseDirectory;
string DllName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
string Fpath = App_Run_Path+@"\bin\"+DllName+".dll";//取得主 dll 檔 修改日期
//DateTime dt = File.GetLastWriteTime(Fpath);//取得 DLL 修改日期
//GetLastWriteTime 微軟說明 :傳回指定檔案或目錄上次被寫入的日期和時間。
//GetLastAccessTime微軟說明 :傳回指定檔案或目錄上次被存取的日期和時間。
DateTime dt = File.GetLastAccessTime(Fpath);
拿他當版本號,算是解決這問題
Dll 檔日期是不會變動的
又回到 原點
後來想想 我只是要 改過 Js 或 Css 就要有新編號....
所以 我將 會變動的 Js 跟 Css 都在一個目錄
然後用
Directory. Get Last Write Time(String) Method
去抓 目錄 最後修改時間 不就好了...
再試試看....
留言
張貼留言