<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    新的項目要求使用C#,對于習慣了Java開發(fā)模式和環(huán)境的朋友來說,一開始總會有些不適應。

    拿我自己的體驗來說,VS2005跟Eclipse SDK相比,當然畫GUI和調試的直觀性方面給我留下的印象很深,不過也有些我認為缺少了的東西:增量編譯(很多時候只有F6以后,編譯錯誤提示才會消失,有些引用和IntelliSense才生效,不像Eclipse,保存后自動增量編譯)、代碼排版(很懷念Ctrl-Shift-F)、引用整理(很懷念Ctrl-Shift-O)、很多有用的重構(可以說VS里面代碼級的重構相比很多Java IDE差遠了)、單元測試的集成(NUnit理論上應該可以很好的集成到VS2005,不過還是花了我一些功夫)、CVS客戶端(很懷念Eclipse SDK)。當然,一些IDE當中相對小的差異一開始也很難適應,不過這些也可以理解,屬于正常范疇。

    最近為了把項目的一些基調和開發(fā)模式定下來,做了一些嘗試,我想也許對大家還有些用,整理一下放在這里。

    一個好的.NET項目,我相信有些東西事先定義好,對項目整個過程是有很大好處的,這些東西至少應該包括:開發(fā)工具選擇和配置、代碼模板、單元測試、代碼自動化review工具、自動編譯和測試、缺陷跟蹤、文檔管理等。當然如果不計成本,那么有很多重量級的SDLC框架可以用,如VSTS(MSF)、Rational(RUP)和Borland的集成工具,以上這些環(huán)節(jié)的問題相應的框架也大都給出了很好的解決方案,但是畢竟不是所有的項目都會購買和采用那么"重"的方法和過程,很多時候就算有那個預算,對于特定的項目,實施起來也不見得就會收到好的效果。于是我們接觸到的很多項目,其實都還是需要自己去尋找適合的工具來把整個周期串起來。以下是我在嘗試找到一套合適方案時遇到的一些特定問題以及解決辦法:

    首先是單元測試工具以及和IDE的集成。在Eclipse SDK中,我們不必太過關心這個問題,因為Eclipse已經很好的集成了JUnit。但是在.NET的世界,人們是怎么做的呢?答案是NUnit,一個跟JUnit非常類似的東西。和JUnit一樣,NUnit也提供了命令行版本和GUI版本,但是VS里面并沒有直接提供集成,你更多的時候需要從外部運行NUnit,當然這樣很不爽啦。VS號稱是自己也提供了單元測試工具,但是那僅僅在高端VSTS中才有。如何解決這個集成的問題呢?可以到http://www.testdriven.net/ 上下載一個TestDriven.NET的VS add-in。安裝以后,就可以在VS中調用我們可能經常需要調用的NUnit來跑自己的單元測試了。

    其次是代碼模板。一個項目,不管大小,總會涉及到相當數量的源代碼文件,我們希望這些源代碼都包括一些共有的東西和特定的注釋,怎么辦?在Eclipse里面有code template的概念,那么在VS里呢?答案是Project Template和Item Template。一開始我根本摸不著頭腦,只看到MSDN上正在說Code Snippet,于是我實現(xiàn)的1.0版代碼模板就是基于Code Snippet的,用起來很不方便,有關Code Snippet,我等下還會提到,這里先看Templates。我Google了一下相關的Project Template和Item Template的說明,基本都是VS 2003的,不過它們給了我很好的提示,至少可以知道VS在生成默認的代碼時是怎樣一個思路。所有的VS 2005代碼模板都可以在%VS_2005_INSTALL_PATH%\Common7\IDE\ProjectTemplates和%VS_2005_INSTALL_PATH%\Common7\IDE\ItemTemplates目錄下面找到,Project Template和Item Template不同的是Project Templates是在你新建一個項目時使用的模板,而Item Templates是在你往一個現(xiàn)有項目中添加item,如Form、Class等的時候使用。這里需要注意兩點:一是VS 2005跟VS 2003不同,templates不再是直接的.cs文件等,而是打包在了.zip中,需要修改的話,需要把新的文件重新壓到.zip中;二是除了template目錄,還有一個TemplateCache目錄,為了立即看到模板的效果,這里面的相應.cs文件等也需要修改。模板改起來相當直接,一看便知,比如新建Form的模板:

    using?System;
    using?System.Collections.Generic;
    using?System.ComponentModel;
    using?System.Data;
    using?System.Drawing;
    using?System.Text;
    using?System.Windows.Forms;

    namespace?$rootnamespace$
    {
    ????
    public?partial?class?$safeitemrootname$:?Form
    ????
    {
    ????????
    public?$safeitemrootname$()
    ????????
    {
    ????????????InitializeComponent();
    ????????}

    ????}

    }


    接下來說說Code Snippet,這個東東被MSDN吹得有點大,不過用起來實在有些不順手,你雖然可以定義一大塊代碼片斷,然后填一些參數,就能得到一個定制的代碼段,但是畢竟你還是需要自己寫很多東西,然后使用的話需要在代碼編輯器里面點很多下才出來,又沒有很好的快捷方式。不客氣地說我覺得用Code Snippet來模擬Eclipse的很多現(xiàn)成的重構功能實在不能夠體現(xiàn)出優(yōu)勢。退一萬步講,有總比沒有強,至少你還是可以做一些東西的。使用現(xiàn)成的Code Snippet很簡單,只要把VS指向你存放Code Snippets的目錄即可,新的Code Snippets會被自動掃描到。方法是:Tools -> Code Snippets Manager或者Ctrl-K Ctrl-B然后添加目錄名。所有的Code Snippets文件都以.snippet后綴結尾,其實內部是個XML,像這個樣子:

    <?xml?version="1.0"?encoding="utf-8"??>
    <CodeSnippets?xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    ??
    <CodeSnippet?Format="1.0.0">
    ????
    <Header>
    ??????
    <Title>Insert?a?simple?set?of?getter?and?setter?pair</Title>
    ??????
    <Author>Sean?GAO</Author>
    ??????
    <Description></Description>
    ??????
    <Shortcut>simplisticGetterSetter</Shortcut>
    ??????
    <SnippetTypes>
    ????????
    <SnippetType>Expansion</SnippetType>
    ??????
    </SnippetTypes>
    ????
    </Header>
    ????
    <Snippet>
    ??????
    <Declarations>
    ????????
    <Literal>
    ??????????
    <ID>AccessLevel</ID>
    ??????????
    <ToolTip></ToolTip>
    ??????????
    <Default>public</Default>
    ????????
    </Literal>
    ????????
    <Literal>
    ??????????
    <ID>PropertyType</ID>
    ??????????
    <ToolTip></ToolTip>
    ??????????
    <Default>string</Default>
    ????????
    </Literal>
    ????????
    <Literal>
    ??????????
    <ID>PropertyName</ID>
    ??????????
    <ToolTip></ToolTip>
    ??????????
    <Default>name</Default>
    ????????
    </Literal>
    ????????
    <Literal>
    ??????????
    <ID>LocalVarName</ID>
    ??????????
    <ToolTip></ToolTip>
    ??????????
    <Default>localVar</Default>
    ????????
    </Literal>
    ??????
    </Declarations>
    ??????
    <Code?Language="csharp">
    <![CDATA[????????$AccessLevel$?$PropertyType$?$PropertyName$
    ????????{
    ????????????get?{?return?$LocalVarName$;?}
    ????????????set?{?$LocalVarName$?=?value;?}
    ????????}
    ]]>
    ??????
    </Code>
    ????
    </Snippet>
    ??
    </CodeSnippet>
    </CodeSnippets>

    我們可以看到,首先在.snippet中我定義了一些變量,然后在<Code/>段加入了<![CDATA[...]]>,就這么簡單。

    最后,還剩一些具體的工具,選擇面比較廣,我只列舉一下我都選了哪些:
    - 代碼review和分析工具:FxCop,可以在GotDotNet網站上下載:http://www.gotdotnet.com/team/fxcop/?。
    - 自動編譯管理:NANT和CruiseControl.NET:http://nant.sourceforge.net/?和 http://ccnet.thoughtworks.com/?。
    - 缺陷跟蹤:mantis:http://www.mantisbt.org/?。
    - 文檔管理: jLibrary:http://jlibrary.sourceforge.net/?。
    - 版本控制:CVSNT和Eclipse SDK:http://www.cvsnt.org/?和 http://eclipse.org/

    暫時就是這么多,如果你和我一樣從Java轉向.NET,然后正在犯愁如何做一個.NET項目的前期準備,希望能給你一些參考。

    Feedback

    # re: [VS2005起步]一些實用的工具和配置指南  回復  更多評論   

    2006-04-01 17:33 by 大胃
    補充一點:
    http://blogs.msdn.com/csharpfaq/archive/2004/10/20/245411.aspx

    多余的/未被使用的using語句在C#源碼編譯的時候會被忽略,所以在C#中其實不用太在意冗余的using會到來性能影響,但是有好的習慣總是不錯的。
    主站蜘蛛池模板: 亚洲日韩AV一区二区三区四区| 久久亚洲AV成人无码国产电影| 国产精彩免费视频| 亚洲AV永久无码精品放毛片 | 国产成人免费永久播放视频平台| 日韩精品亚洲专区在线影视| 久久伊人亚洲AV无码网站| 巨波霸乳在线永久免费视频| 亚洲av无码日韩av无码网站冲 | 亚洲一线产区二线产区区| 亚洲AⅤ视频一区二区三区| 久操免费在线观看| 亚洲精品国产综合久久久久紧| 亚洲综合色婷婷七月丁香| 黄页网站免费观看| 三年片免费高清版 | 久久精品免费电影| 亚洲AV电影天堂男人的天堂| 亚洲AV综合色区无码另类小说| 国产精品无码免费播放| 成全视频在线观看免费| 亚洲va中文字幕| 久久亚洲一区二区| 午夜国产羞羞视频免费网站| 最近中文字幕国语免费完整 | 亚洲第一极品精品无码久久| 成人免费在线视频| 无码人妻一区二区三区免费看 | 久久精品国产亚洲AV麻豆不卡| 热99re久久免费视精品频软件| 国产成年无码久久久免费| 亚洲GV天堂无码男同在线观看| 亚洲成人动漫在线| 中文字幕亚洲专区| 免费人成视频x8x8入口| 毛片免费在线视频| 久久WWW免费人成一看片| 国产99精品一区二区三区免费| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲视频在线观看视频| 亚洲人JIZZ日本人|