星期二, 5月 31, 2016

救回 Windows 作業系統下被封印的 USB 磁碟空間

明明就是 16GB 的新 USB Disk,在 Mac 使用正常,跑到 Windows 不但提示要格式化才能使用,而且空間只有 200MB?救命文在

星期三, 5月 18, 2016

放寬 IIS 7 上傳大檔的限制

如圖。值得注意的是有兩個設定值影響,而且一個單位是位元組,另一個是仟位元組。

自動更新的 IIS / IIS Express 網站建置時戳

在網站開發期,由於要經常建置、部署、測試,常會有一個困擾,那就是「不容易識別目前在執行的網站版本」。如果有個政策是「每次部署都人工修改頁面上的版本資訊」固然可以,但難保不會忘了做。
為了解決這種問題,我的做法是在首頁引入以下的檔案:
  • <script src="lastBuild.js"></script>
並且在頁尾安排顯示的位置,
  • <div id="lastBuild"></div>
當頁面載入時,更新內容:
  • <script>
  •     $(function () {
  •         $("#lastBuild").text("lastBuild: " + lastBuild);
  •     });
  • </script>
重點是 lastBuild.js 的內容,藉由 Visual Studio 編輯 Pre-build event command line 動態產生,指令為:
  • set output=../lastBuild.js
  • echo | set /p dummy = "var lastBuild = '" > %output%
  • FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set D=%%a
  • set timestamp=%D:~0,4%/%D:~4,2%/%D:~6,2%T%D:~8,2%:%D:~10,2%:%D:~12,2%';
  • echo | set /p dummy = %timestamp% >> %output%
有些值得說明的地方,例如第 1 行定義產檔位置在上層目錄(否則可能預設在 bin\);第 2, 5 行的 echo | set /p dummy = 而不是單純用 echo,為的是避免多餘的空行;第 3 行的 WMIC 指令用來取日期,若單純用 date 指令會受 Locale 影響年月日的順序,find "." 也是用來過濾掉多餘的其他行;第 4 行用來格式化時戳字串。如此在每次建置時,產生出來的 lastBuild.js 內容就會像這樣:
  • var lastBuild = '2016/05/18T17:09:15';
在頁尾的顯示會像這樣:
  • lastBuild: 2016/05/18T17:09:15

星期三, 5月 11, 2016

Visual Studio Web Publish on many Configurations

過去一直沒搞清楚這幾個 Configurations 有什麼不同?


其實很簡單:最上面是 Solution 的,中間是 Project 的,下面是從 Publish Web 開出來,當然就是「發行網站」的組態設定。但這又是什麼?
在此又牽涉到另一個過去沒搞清楚的:到底 Web.config 下面多出那兩個是什麼?


事實上那就呼應到發行網站時可以搭配的多種組態啦!那是直接編輯各個組態檔嗎?可以是,也可以不是。因為實務上絕大部份的組態設定在不同組態下都是相同的,如果因此就複製貼上一大段實在不智,正規的做法如下:


如此在發行網站時,就會即時計算與組態匹配的內容,動態地產生調整後的 Web.config 供發行使用。在此例中,當 Publish Configuration = Release 時,Connection1 的 Server=Development... 會被置換成 Server=Release...,但 Connection2、Connection3 將繼承原本的 Web.config。