顯示具有 Visual Studio 標籤的文章。 顯示所有文章
顯示具有 Visual Studio 標籤的文章。 顯示所有文章

2014年10月16日 星期四

NuGet 3.0 將不再支援 VS2010

VS2010 仍然可以使用舊版的 NetGet 2.X,但有使用到新版特色的 package,就無法透過 NuGet 2.x 來取得了。

   目前 VS2010 的使用率只剩 6%。也請各位有空升級一下。

參考:

    http://blog.nuget.org/20141002/visual-studio-2010.html

2014年6月25日 星期三

Visual Studio 2013 套件

整理一下我所使用的 Visual Studio 套件。

  1. SideWaffle : 增加好用的 snippet, project templates, item templates. 尤其在 angularjs 的開發上。
  2. OzCode : Debug 用
  3. jQuery Code Snippets
  4. Productivity Power Tools
  5. ReAttach : 重複 Attact 上一次所 attach 的 process。Debug 用
  6. SlowCheetah: xml Transforms, 轉換 .config 用,並且可以 preview 並比對轉換前後的差異
  7. Snippet Designer: http://snippetdesigner.codeplex.com/
  8. SpecFlow : BDD
  9. t4 editor: 寫 t4 template 用的編輯器
  10. Team Foundation Server Power Tool
  11. Web Essentials: 開發 Web 專案必備
  12. NUnit Test Adapter : 單元測試用
  13. xUnit Test Adapter : 單元測試用

2013年6月3日 星期一

將 Visual Studio 打包好的 package 佈署到 IIS 6

之前的許多經驗,都是把打包好的 package 佈署到 IIS 7 以上的版本。此中又依據權限,再分成管理員權限的佈署及非管理員權限的佈署方式

這次,我被要求佈署到 IIS 6 上了。

IIS 6

我之前的態度,是一味地以「Windows Server 2003 大舊了,現在沒有人在用了」來推託一翻。雖然言之有理,但其是一大部份原因是:懶!
然而,債還是要還的。客戶出錢,我們做人家小的還是要出力,即使入不敷出。

IIS 6 與之後的 IIS 7有個根本上的不同,是IIS 7 對 metabase 的全面改版,並且 IIS 7 可支援非管理員來管理 IIS。在 Visual Studio 發行的結果,是對 Web Deploy 是再包裝過精簡後的工具,處理的對象是  IIS 7 的 metabase。對於 IIS 6,只能自行尋找文件。

如果直接使用 Visual Studio 所產出的 cmd 指令執行到 IIS 6,會出現如下的錯誤訊息。

SNAGHTML243900aa

使用 MSDeployAgentService

在同一個目錄中,可以找到 Visual Studio 為我們寫好的 readme 檔案,其實裡面已經寫的很清楚了,是可以使用這些工具部署到 IIS 6的。

The service URL can also be in the following format:
        http://<DestinationServer>/MSDeployAgentService 
    This format requires administrative rights on the destination server, and it requires that Web Deploy Remote Service (MsDepSvc) be installed on the destination server. IIS 7 does not have to be installed on the destination server.

也就是說, 我們必須使用 http://serverName/MSDeployAgentService 使用管理員權限來進行部署。

改一下指令,如下

package.cmd /T /M:http://localhost/MSDeploymentService

結果不如人願,非常類似的錯誤訊息還是打擊了我一下。

SNAGHTML2429b1de

解法

注意到了問題了嗎?另一個重點在於 Metabase 路徑,新舊版本不一樣。所以,我偷偷修改了SetParameters.xml,由原來的

<setParameter name="IIS Web Application Name" value="Default Web Site/myApp" />

改成

<setParameter name="IIS Web Application Name" value="/lm/w3svc/1/ROOT/myApp" />

再執行相同的指令

package.cmd /T /M:http://localhost/MSDeploymentService

就完成了我的需求了。

其實,如果是在本機的話,指定機器的 /M 指令也不用加了。只需要

package.cmd /T 即可

進階

由於使用了 MSDeploymentService,就必須使用管理員的權限。既然是管理員權限,在別台機器(只需要安裝 Web Deploy Tool)當然也可以下指令,不必遠端桌面登入到該伺服器。

package.cmd /Y /M:http://serverIpOrHostName/msdeployagentService /U:administrator /P:Password

PS: 對部署來說,這個權限要求實在大到不行,對於無限上綱的資訊安全管理說,就是很好發揮的題材。誰叫你還要用 Windows Server 2003 呢?

2011年11月8日 星期二

App.Config 的轉換

在 Visual Studio 2010 中,可以針對 Web.config 進行轉換

那 App.config 呢?好心人很多,現在也可以使用相同語法進行 app.conifg 的轉換。

在 Extension Manager 中找 SlowCheetah - XML Transforms

image

參考自 http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx

2011年6月23日 星期四

安裝 HTML5 Support for Visual Studio 2010

HTML5 Support for Visual Studio 2010

微軟的 Visual Studio 2010 終於支援 HTML5 的編輯了。看了Announcing the Web Standards Update - HTML5 Support for the Visual Studio 2010 Editor,就下載了 Visual Studio Web Standards Update

問題

怪事發生了,一旦執行 Web Standards Update.msi,就會出現 Service pack 1 for visual studio 2010 must be installed 的警告訊息。我的確有安裝 SP1 for VS2010 啊!

SNAGHTML2ac48c

解決

如果有安裝 Windows SDK 的話,可從修改 msi 檔著手。以我的機器為例,在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ 下有個 Orca.msi,安裝後,執行 Orca。

image

打開 Web Standard Update.msi 後, 在左方 Tables 內選 CustomAction, 在 VSDCA_VsdLaunchConditions 上按右鍵 ,執行 Drop Row功能。

SNAGHTML3205d8

記得按儲存鍵。

image

執行

由於我們修改了 msi,數位簽章就失效了,執行時會出現如下圖的警告訊息,這是正常的。按「Run」以繼續執行。

SNAGHTML34ad88

然後,就可以安裝了。

SNAGHTML35d9c4

SNAGHTML364f42

執行 Visual Studio 2010.建立一個新的 Web Application後,可以選擇 HTML5 來檢查格式。

image

當我們打入 <vi時,會出現 video 的 intellisense (智能提示)。果然好用。

image

參考

我將修改好的 msi 放在這裡,有需要的人可以自行下載。

2011年6月1日 星期三

Enterprise Library on NuGet

NuGet 也可以直接安裝 Enterprise Library 了。

問題

舉例來說,之前在使用 Enterprise Library Exception Handling Application Block 時,需要在專案上加入下列參考

Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling

沒有經驗的人,很難一次引用正確。

解決方式:NuGet

Add Library Package Reference

image

安裝指定的 package

image

完成!還比想像中多了一些 dll,這些 unity 在用的 dll,什麼時候會用到我也不知道。

image

可惜的是,引用 package 並不會直接產生 .config 的設定。原因很簡單,它不知道我們要設定些什麼。

Enterprise Library 的設定太靈活了,要設定的話,還是乖乖地使用 Enterprise Library Configuration Editor 來設定吧。

2011年3月21日 星期一

Visual Studio 如何共享程式碼

有人問到,在 Visual Studio 中如何在不同的專案/方案中,分享同一組程式碼/檔案。

其實很簡單,加入一個已存在的項目(Existing Item

image

),選到檔案後,選擇加入的方式為「Add as Link」。

image

這樣一來,原始位置的檔案更新後,其他 link 的內容也同步更新。

2011年1月16日 星期日

使用 IIS Express

上一篇介紹 IIS Express 後,這一次談如何使用。

安裝

Internet Information Services (IIS) 7.5 Express 下載後執行。安裝過程完全是「下一步」「是」「完成」的過程,其間沒有任何輸入選項。或者到 Web Platform Installer 來安裝 這個連結

自行啟動 IIS Express

預設的狀況下,是要自行修改 IIS Express 設定及啟動 IIS Express 的。以下就介紹如何在 Visual Studio 2010 上使用 IIS Express。

  • 首先,建立一個 Web Application,並且命名為 WebApplication1。接著,修改 WebApplication1 的 Property,在 “Use Custom Web Server” 中設定為 http://localhost:12345/

image

  • 再來,以notepad 打開 %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config,修改configuration\system.applicationHost\sites 如下
<sites>
    <site name="WebSite1" id="1" > <!-- serverAutoStart="true" -->
        <application path="/">
            <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation=":8080:localhost" />
        </bindings>
    </site>
    <site name="WebApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\bc\Documents\visual studio 2010\Projects\WebApplication1\WebApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation=":12345:localhost" />
        </bindings>
    </site>
    ...

我主要增加了一個新的 site,name 為 WebApplication1。id=2,請不要重複即可。在 physicalPath 中,請填入上一步 Visual Studio 所建立的 web Application 的應用程式目錄。bindngInformation 則彷校範例 WebSite1的樣子,修改為 :12345:localhost,意思是使用  localhost 的12345 port

而我將 第一個 Site name=”WebSite1” 的 serverAutoStart 移除掉了。因為我不想一啟動 IISExpress 就會啟動這個WebSite1範例。

  • 最後,按Win+R鍵或在 cmd 中執行下面指令以啟動 IISExpress
"C:\Program Files\IIS Express\IISExpress.exe" site:WebApplication1

執行結果如下圖

image

在Windows 右下方也會出現圖示。在圖示上按右鍵可以查詢執行。

image

當然,我們就可以執行 http://localhost:12345/

image

 

整合Visual Studio 2010 開發環境

上述的設定過程是不是很麻煩呢?是的,可是沒辦法。我們必須等到 Visual Studio 2010 SP1之後,才能享到直接在開發環境中整合設定的好處。使用 Visual Studio 2010 SP1 Beta 時,會多出一個「use IIS Express」的選項,如下畫面。

image

在未使用 IIS Express 的 Web 專案,也會多出一個 Use IIS Express 在快顯選單上。

image

結論

我還是等到 Visual Studio 2010 SP1 好了。這樣比較簡單。但對於其他如  VS 2005, VS2008 等使用者,只好說聲 Sorry,乖乖地自行啟動 IIS Express 吧!

2010年9月29日 星期三

讓 Visual Studio 跑 3GB

緣由

在許多狀況,Visual Studio 都會跑的很辛苦,其中一個原因是 Visual Studio 只有 32位元的版本,而沒有 64 位元的版本。至於為什麼微軟不出 64 位元版本,原因很多,詳情見Visual Studio: Why is there no 64 bit version? (yet)

然而,Windows 只能讓32位元的應用程式存取到 2GB的記憶體。對於剛推出32位元電腦的時代(15年前了吧),有4MB記憶體的電腦就已經很高檔了。 對於現在的我來說,我的電腦已有8GB,作業系統也是Windows 7 64位元版,Visual Studio 只能跑2GB 的限制簡直是孫悟空的緊箍咒,真是天大的限制。尤其是跑  CAT.NET 時,需要大量的記憶體,2GB 一下子會出現 out of memory,真是不知道該怎麼辦。

[解法一]

找到了這一篇 Hacking Visual Studio to Use More Than 2Gigabytes of Memory。讚!

由於我是 64位元的系統,對於系統的 3GB修改就免了。直接使用 Visual Studio Command Prompt,執行下面的指令

cd "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE"editbin /LARGEADDRESSAWARE devenv.exe

執行

以下執行 CAT.NET 時,需要2.05 GB 的記憶體。在未操作前,跑到 1.64 GB 就不行了。

image

[解法二]

OutOfMemoryException Fix 這裡則給了另一個解法。由於這是 ReSharper 的公司 jetbrains 給的 solution,但在 windows server 2008R2 + Visual studio 2005 上跑似乎並非預期可以解決該問題。

[20101001] 在 Windows Server 2003 + Visual studio 2005,該方法卻似乎有用,但在最後,還是讓 Visual Studio 2005 掛掉。

image

2010年9月7日 星期二

Visual Studio 2010 無法連線到 Visual Source over internet

正常來說,Source Control 改使用 Visual SourceSafe (Internet)後,在打開專案的視窗中,應該可以看到 Add SourceSafe Database 的項目。

然而,我的同直卻空空如也,一片空白。為什麼呢?原來又有更新未上。見 http://support.microsoft.com/kb/943847/en-us?p=1

 

SNAGHTML1b6bb2f

2010年7月18日 星期日

對 .NET Framweork 進行除錯

有時候,我們程式寫著寫著效能不佳,就可能怪起微軟的 .NET Framework了。微軟看來也怕了這一點,趕緊公佈 .NET Framework 的 Source Code,並且還可以在 Visual Studio 2010 進行除錯。

以下就介紹如何設定。

步驟1:下載

請到 http://referencesource.microsoft.com/netframework.aspx , 下載 .NET 4 的 Source Code 及 Symbol.

image

步驟2:安裝

下載回來的是 Net_4.msi。安裝時設定指定路徑為個人檔案的路徑,如 C:\Users\yourname\Documents\RefSrc,我就用了這一個路徑。

步驟3:設定

設定的步驟比較多。打開 Visual Studio 2010,執行功能表Tools/Options,選擇 General 頁。
不要勾選 "Enable Just My Code (Managed only)"。
勾選 "Enable .NET Framework source stepping"。
勾選 "Enable source server support"。
不要勾選"Require source files to exactly match the original version"


如下圖:

image

再選到 Symbols 路徑

按新增目錄,輸入 C:\Users\yourname\Documents\RefSrc\symbols
在 Cache symbols in this directory 中輸入 C:\Users\yourname\Documents\RefSrc\symbols\SymbolCache

完成後按確定。
image

大功告成。之後您就可以使用 F11來除錯了。

2010年6月30日 星期三

執行Coded UI Test 出現例外:The playback failed to find the control

過程

在本機執行 Coded UI Test 好好的,改到 Test Agent 上執行,卻發生測試的例外:

Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: The playback failed to find the control with the given search properties. Additional Details: 
TechnologyName:  'MSAA'
ControlType:  'Button'
Name:  'Close'
 ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component..

原因

錄製測試時,是使用本機 (Windows 7 En + IE 8) 來錄製的。該測試最終時會關閉瀏覽器。

Test Agent 上則是 (Windows 2003 + IE6)。故執行測試時, IE 6 上並沒有 “Close” 的 Control。因為不同文化的關係,中文 IE 上應該是「關閉」而非「Close」。

解法

目前我並不清楚碰到不同語言版本的瀏覽器時,Coded UI Test應該如何處理,但微軟的 Visual Studio Test tools 有關閉瀏覽器的 API 可直接呼叫,就省去以名稱來找 Control 的困擾

var browser = BrowserWindow.Launch(new System.Uri(this.LauchBrowserParams.Url));
browser.Close();

當然,需要手動修改程式。

2010年6月29日 星期二

寫出好程式的好習慣

在寫程式時,哪些習慣必須建立呢?以下列出我認為一個好的程式設計師應該養成的好習慣。

1 Test Driven Development

第一名的,就是我非常推的 TDD了。TDD不只是先寫測試再寫程式這麼簡單的規定而已,背後還包涵了一些情境。

首先,在寫測試程式時,其實就必須先要了解需求。不知道需求,當然寫不出測試。

其二,寫測試時式時,其實我就會開始想「要怎麼讓客戶端呼叫我的程式」,方法是要建立在 instance上呢?還是實作成類別的靜態方法。此時,我們就必須從由使用者的觀點來看,客戶端應該如何使用我們的程式。

其三,寫測試程式時,也會想到客戶端如何與我的程式互動?由兩者的互動關係,進而衍生出 dependent objects,dependency injections, IoC 等。而撰寫測試時,也需要開始建立  mocking object。

最後,TDD將修正我們所寫的類別,不再自行建立物件,而改由客戶端傳入,因此可得到較佳的相依性。好處是物件的生命週期可規劃在IoC一致處理,避免物件到處都是。

2 善用 Static analysis 工具

Visual Studio 中有個 Calculate Code Metrics工具,可計算程式的可維護性指數。此可維護性指數是由循環複雜度、繼承深度、類別結合程度、程式碼行數等四者組合而成。每次重構後,我也習慣來這裡看看可維護性指數是否增加了。如果可維護性指數小於10,那就代表完全沒辦法維護,這樣的程式是連當初的作者也會看不懂的。

FxCopCode analysis 又是另一種常用的功能。它將常見的程式規則寫成 coding rule 並進行分析。分析完後產生如同編譯的錯誤或警告,讓開發人員可以得到提醒並進行修正。

3 使用開發輔助工具

使用良好的開發輔助工具,會讓我們寫程式時事半功倍。Visual Studio 已經內建了許多工具,如 Refactor,Code Snippet等。第三方工具如 CodeRush, ReSharper 等更提供強大的功能,幫助我在搜尋、重構、程式碼分析等地方。

不得不提一下ReSharperCode Analysis功能,可直接在編輯區中背景地指出程式哪裡需要改進。就好像請了一個超強的大師,在身邊耳提面命,不斷地提出修正。久而久之,程式功力當然會進步。

image

4 不要太多的預設計 (Big Design Up Front)

在開發程式時,僅需要符合當下的需求就好。不要預想未來「可能」的需求為何?效能問題?應用程式架構怎樣分才能符合「未來」的需求。

要知道未來不見得發生這些預想的事。做這些預設計不但浪費時間,並可能造成未來程式難以重構,成本自然增加不少。

之前我也犯下不少這樣的錯誤。其中一項頗令我汗顏。當時我將某網站設計成三層式(3-tier)的架構,其中應用程式層(application tier)使用了 remoting的分散式架構。當時想:未來系統一定拆開到不同的伺服器,以符合高擴展性的需求,這些設計未來一定會用到。結果,開發兩年後,不但沒有發生,更糟的是網站還交給另給一組人維護。因為我做了多餘的設計,而這個設計已過了5年還沒發生當時預想的狀況,新進人員都會問當時為何這樣設計?造成交接、維護上的困擾。

5 奧坎剃刀原則 (Occam’s razor)

Occam’s razor 說明了下面的原則:
     假如一個問題有很多種解決辦法,選最簡單的那個

造成系統複雜的原因,其實還可再細分成兩種類型:本質複雜及意外複雜。

本質複雜(essential complexity)

本質上的複雜,是該問題本質上就比較複雜,我們應該採取科學上的方法讓它變簡單。常見科學方法,再分成兩種。

一個是將大而複雜的問題,拆解成多個簡單的小問題,進而一個個解決並得到整體行為。例如微積分,有限元素法。專案管理中的WBS 也是採用了這類的方法。這類方法有個缺點:小問題的總體行為等同於原大問題的行為嗎?

另一種是承認該大而複雜的問題難以拆解成小而簡單的問題。因此使用統計學的方法來統計大而複雜問題的行為。缺點是相當費時秏力,方法不正確,有時反而會得到相反的結果。

意外複雜(accidental complexity)

問題本質性的複雜外,有時候(也是常常)是我們採取的解決方法錯了,反而使得問題更複雜,稱為意外複雜。例如上述我所犯的預設計問題。此時,正確的方法則是將這些意外複雜因素移除掉。

本質複雜與意外複雜有時難以分辨,相當依賴設計人員的經驗。經典常見的意外複雜原因,如下。

  • 我們實作了自己的 Web/Persistence/Messaging/Caching 的framework, 因為找不到比較好用的!!
  • 買整個工具包,即使我們只用到10%。
  • 為了效能,我們將所有的商業邏輯寫到 Stored procedure。(常見吧!)
  • 我們不寫單元測試,因為我們已經花了很多時間在 debug。(真是天才)

這些理由看起來頭頭是道,似乎解決了問題,卻都使用問題更意外複雜。

6 學新的技術

為何要發明新技術?新技術往往是用來解決以前難以解決的問題,進而使用更簡單的方式來解決。以下是一些新的技術,您學會了嗎?
•Reflection
•Regular expressions
•Dependency injection
•Lambda expressions
Extension methods

雖然使用新技術解決問題往往更加容易,但並非一定要採用這些新技術才能解決問題。因此許多「上班族」不願花時間學習,只願使用已經習慣的舊技術來解決。這樣的心態,稱為舒適區(Comfort zone)。這裡不適合討論心理學,話題就此打住。

7 獨立思考

並非所有新技術都能存活下來,故並非所有新技術都值得學習。那要如何分辨呢?

相同的道理,網路上的訊息已經多到「知識爆炸」也難以形容,但我們還是要學習/吸取新知。那要學習哪些知識呢?使用什麼方式學習較有效率呢?

答案就是獨立思考,不要隨廣告/行銷等手法矇騙。要常常想這樣做,比較快嗎?比較有效率嗎?沒有其他方法了嗎?沒有其他觀點了嗎?

結論

寫著寫著,就跳脫程式寫作的範圍了。要如何寫出好程式,其實與個人的思考習慣有密切關係。希望這一篇能對大家有幫助。

後記:感謝保哥提醒,應為 Extension Methods

2010年4月13日 星期二

Visual Studio 2010 RTM release

Visual Studio 2010 出來了!請到 msdn subscription 下載。
等這一天讓我多等了一個月。

下面列出測試版的下載位置,或者您也可以下載免費的 Express 版.

2010年4月7日 星期三

Unit Test + Code Coverage + Strong Name = test failed

在執行測試時,發生了如下的錯誤訊息,而測試並未被執行

Strong name verification failed for the instrumented assembly 'Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Please ensure that the right key file for re-signing after instrumentation is specified in the test settings.

原因

為了取得 Code Coverage的資訊,執行測試時,事實上是在受測的 assembly 增加了一些程式,以方便取得資訊。

然而,如果 assembly 本身就有 strong name的話,被增加了一些程式,當然會被認為不安全了。因此這個機制就無效,也就無法取得 Code coverage 的資訊了。

解法

可見 Instrumenting and Re-Signing Assemblies。我使用的是比較簡單的Disable Signing Verification方法,也就是不檢查某些 assembly 的簽章啦。

解決我的問題,就是在 cmd.exe 下 sn –Vr Microsoft.Practices.Unity.dll 就解決了。

這樣,只會影響執行測試的機器無法檢查指定的 assembly 了。

進階解法

雖然使用上述的方法可以解決該問題,但在該台機器就不檢查這些指定的 assembly?好像也不太對。最好能在測試前執行 sn –Vr assembly.dll,測試後再回復設定。

因此,就可以使用 sn –Vu assembly.dll 語法了。該語法還原 assembly.dll 成必須檢查 strong name。另外,在執行測試的設定(通常是 LocalTestRun.testrunconfig)上,設定 setup and cleanup scripts,執行這些指令就可以了。

如下圖。setup.cmd 內放 sn –Vr assembly.dll , cleanup.cmd 放sn –Vu assembly.dll

image

2010年4月2日 星期五

為程式碼減肥

在開發的過程中,會不斷的新增及修改程式。雖然使用了 TDD (Test-driven development)開發方法,一定程度上不會寫出不必要的程式,但人非聖賢,難免還是會留下一些不必要的註解及程式。

要下是我常見的毛病:

  1. 宣告了變數卻從不使用。
  2. 指定了變數值(assign),卻從不讀取(comsume)
  3. 宣告了 private method (方法),卻沒有使用過。
  4. etc

這樣一來,程式碼難免愈來愈來多, assembly size也就愈來愈大,執行時就需要更多載入時間,導致維護困難與效能不佳的問題。

有沒有工具可以幫我們找出一些不要的程式「脂肪」呢?在 Visual Studio 2005 後,就多了一個 Code Analysis 工具,可以幫我們找出許多程式碼的問題。

image

在方案總管的某一專案上按右鍵/內容,可以找到 Code Analysis 頁。

image

在 Performance Rules中,可以找到一些有用的 rule,可用來檢查上述不必要的程式碼。

  • CA1804: 未使用的區域變數。這個最常犯了,一定要選取
  • CA1805: 不必要的初始值。
  • CA1809: 過多的區域變值。
  • CA1811: 未被呼叫的私有程式碼。見 CA1811: Avoid uncalled private code
  • CA1823: 未被使用的私有成員變數 (private field)。

自己已經覺得有程式碼潔癖了,但仍使用Code analysis 找到不少的程式脂肪,真窘。

在 Code Analysis 還有許多寶物等待我們去挖掘呢。

PS: 有些英文實在難以翻譯出適當的中文敘述,請大家見諒。

2010年3月25日 星期四

C# 鍵盤對照表

想要開發時增加生產力,一定要了解快速鍵。

請參照 Visual C# 2008 Keyboard Shortcut Reference PosterVisual C# 2005 Keyboard Shortcut Reference Poster

[2010/04/29] 補上 VS 2010 Key binding Card

下載的 pdf 檔,有時真的不知道在說些什麼,因為說明實在太精簡了,而給的範圍也太大了些。此時,知道別的專家都使用哪些快速鍵是個好方法,此時參考 http://stackoverflow.com/questions/98606/favorite-visual-studio-keyboard-shortcuts 。這裡反而是較快上手的地方呢。

最完整的地方,當然還是 msdn 了。

2010年2月9日 星期二

VS2010 RC 今天出來了

今天 (2010/02/09)出來的,只能從英文版的 msdn subscriptions。繁體中文件介面還看不到。

正式版預計 4/12 出來。

後記:(2010/02/12)
公開下載的位置,資訊更完整,連同 Visual Studio 2010 SDK 等也一起出來公開下載了。

2010年1月5日 星期二

WebTest 的Form Parameter 與日期有關

以Visual Studio 2008 進行網頁測試(WebTest)錄製後,通常不會有問題。但過一段時間後,再回來執行 WebTest,通常會發生一些錯誤。其中一部份與時間有關。以下是一個例子。

國外旅遊查詢網頁,出發日期只能選最近的10天來查詢。

image

錄製 WebTest後,可看到送出的日期為 2010/01/06 日。

image

過了幾天後,到了 2010/01/07 時,再來跑這個 WebTest,就會發生錯誤。

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation

原因是到了2010/01/07 時,dropdownlist 只會產生 01/07 ~ 01/16 這10天的資料,並不會有 2010/01/06 的選項。預設,asp.net 2.0 會檢查這個問題,稱為 event validation。

解決方法呢?有兩種,一種是產生 Coded Test, 可使用工具列中的 Generate Code 來產生程式碼,再到該程式碼中,改成 DateTime.Today.ToString(“yyyy/MM/dd”),這樣一來,就解決了問題。

image

image

另外一種較佳的解決方法,則必須安裝 codeplexWeb Test PlugIn 1.1。使用方法,可見說明。於是,只需要修改 Form Parameter 為 <%=DateTime.Today.ToString(“yyyy/MM/dd”)%>即可。

image

結論

兩種方法,當然以第二種較為方便,而且有彈性。第一種方法,在轉成 Code 之後,失去了Web Test 的UI,無法有直覺性地了解測試結果,但也因為轉成code 之後,任何的測試目的都可以達成。

2009年12月15日 星期二

CAT.NET 容易 OutOfMemory

繼上一次 CAT.NET 初用後,又使用不少次。原因當然還是要幫同事找出 Sql Injection 的問題。

找出 Sql Injection 漏洞根本不是人做的,因為我們無法像父母親照顧小孩一樣,隨著專案不同階段來檢查專案的程式碼是否有 Sql Injection 問題。

而 CAT.NET 除了可以幫我們找出該類的問題外,更可以與開發工具結合,直接與顯示出問題發生的路由。

可惜的是,CAT.NET 工具非常秏記憶體,而一個 32 位元的程式,預設只能吃到 2GB。又與 Visual Studio 結合後,最多只能吃到 1.2 GB 左右而已。

為了解決這個問題, CAT.NET 出了 64 位元版,該版本就是要解決記憶體不足的issue。但,Visual Studio 並沒有 64位元版。換句話說,CAT.NET 64 bit version 無法與Visual Studio 結合,這是該版本的一大不方便的地方。

使用 64 位元版,只能使用 command line 的方式來執行。說明文件,則可以解壓縮後找到 CAT.NET.chm。該說明相當詳細了,不必在這裡重複。

我最常用的指令,如下。意思是找到 c:\dll 下所有的 dll ,分析後將報告輸出成 c:\dll\report.xml。

CATNETCmd64 /file:C:\dll\*.dll /report:c:\dll\report.xml

最後,將該 xml 改套用 \CATNETx64CTP\CAT.NET\Config\report.xsl ,即可看到輸出的報表。也就是加入 xml-stylesheet 這一行於 xml 檔。

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="report.xsl" ?>
<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Analysis>

後記:
    讀者問到:「如果專案是以網站(WebSite)的型式建置開發,因此建置時不會產生dll」時該怎麼辦?

    由於CAT.NET的運作原理, 是「看」assembly 的運作方式是否有問題,然後再將問題對後到原始程式碼,顯示出問題的path。因此必須有 assembly 才能運作。

    解決方法,是先使用ASP.NET 編譯工具 (Aspnet_compiler.exe)將WebSite compile 成 dll後,再執行 CAT.NET 進行分析。

Share with Facebook