移動項目開發筆記(管理不同解決方案下的DLL檔案相互引用之心得體會)

來源:互聯網
上載者:User

      當項目比較龐大時候Dll檔案的管理顯得就尤其重要了,比如多個解決方案有不同項目之間的引用,如果引用的路徑都指向某項目bin下的dll檔案的話,dll維護起來很不方面,因此遇到這種情況的話該怎麼更好的管理這些DLL檔案呢?最近進行中移動項目就屬於這種情況,項目中有三個解決方案,每個解決方案下有多重專案,並且每個解決方案的不同項目又有引用。而且又引用了外部的一些Com組件,當一個項目代碼發生變化時候,其他項目引用該dll檔案是否已經更新是經常需要考慮的問題,而且這樣當出現bug時候也很難確定是否是DLL版本更新問題。另外不但這樣的DLL檔案管理很麻煩,而且很可能導致dll檔案版本不正確引起莫名奇妙的問題。

     目前這個項目進行到了最後階段,對這個項目進行了重構,所以對項目的DLL檔案的管理進行了整理,整理過程中有一些新的體會和朋友們分享。而且也學習了關於Post-build event command line事件即(產生後事件)的用法,感覺用Post-build event command line不失為管理DLL一種方法。個人感覺這種方法比較實用,先分享出來供朋友們參考,希望朋友們能提出寶貴的意見。

總述:當多個解決方案互相有引用DLL關係時,可以統一建立一個ReferenceLib檔案夾,所有項目引用外來的DLL(非本解決方案)都引用該ReferenceLib檔案夾下的,裡面存放所有已經編譯好的其他解決方案的DLL,一旦引用外部的DLL,那麼在項目中引用的地方將顯示路徑,而在同一個解決方案下的不同項目將直接引用項目即可。

現在的問題就是當項目下有更新時候,如果把更新的dll檔案從項目下拷貝到專門用於dll檔案管理的ReferenceLib檔案夾下呢?也就是說當項目編譯的時候就執行拷貝操作,這樣就用到了上面說到的Post-build event command line編譯產生後事件。

在編譯某工程時將DLL拷貝到指定的檔案夾下,便於及時引用新的DLL。在Build Events----->post build event command line中寫命令

文法是:copy "路徑1" "路徑2"

註:路徑1代表要從哪兒拷貝的路徑,即相當於"From"

路徑2代表檔案拷貝到哪兒去,即相當於"To"

下面是一些例子用法理解這種文法格式

     copy "$(SolutionDir)configuration\*.xml" "C:\CharlesChen" 

    copy "$(SolutionDir)configuration\*.configuration" "C:\CharlesChen"

    copy "$(SolutionDir)configuration\*.config" "C:\CharlesChen"

    copy "$(SolutionDir)configuration\Icon\*.config" "C:\CharlesChen" 
    copy "$(SolutionDir).."reference\database.config" "C:\CharlesChen"

    copy "$(SolutionDir).."reference\Images\open.gif" "C:\CharlesChen"

注意:

    1.$(SolutionDir) 表示該解決方案,  "$(SolutionDir)configuration " 該解決方案下有檔案configuration.

    2."*.xml" 表該檔案下尾碼為"xml"的檔案.

3."$(SolutionDir)..\reference\" 表示和該解決方案同級有檔案 reference.

Copy "$(ProjectDir)bin\Debug\*.*" "$(ProjectDir)..\References"   即把當前項目目錄下的Bin\Debug檔案夾下的所有檔案拷貝到和當前項目同級的References檔案夾下

 

上面用到了"$(SolutionDir)"這種表示路徑的方式,這是VS能自動識別的。當然不只是這一個,通過查看MSDN還有其他預定義的路徑表示方法:具體可參見MSDN,這裡我把它複製下來:

具體可參見MSDN:http://msdn.microsoft.com/zh-cn/library/42x5kfw4(VS.80).aspx

宏  說明 
$(ConfigurationName)
 當前項目配置的名稱(例如,“Debug|Any CPU”)。
 
$(OutDir)
 輸出檔案目錄的路徑,相對於項目目錄。這解析為“輸出目錄”屬性的值。它包括尾部的反斜線“\”。
 
$(DevEnvDir)
 Visual Studio 2005 的安裝目錄(定義為磁碟機 + 路徑);包括尾部的反斜線“\”。
 
$(PlatformName)
 當前目標平台的名稱。例如“AnyCPU”。
 
$(ProjectDir)
 項目的目錄(定義為磁碟機 + 路徑);包括尾部的反斜線“\”。
 
$(ProjectPath)
 項目的絕對路徑名(定義為磁碟機 + 路徑 + 基本名稱 + 副檔名)。
 
$(ProjectName)
 項目的基本名稱。
 
$(ProjectFileName)
 項目的檔案名稱(定義為基本名稱 + 副檔名)。
 
$(ProjectExt)
 項目的副檔名。它在副檔名的前麵包括“.”。
 
$(SolutionDir)
 解決方案的目錄(定義為磁碟機 + 路徑);包括尾部的反斜線“\”。
 
$(SolutionPath)
 解決方案的絕對路徑名(定義為磁碟機 + 路徑 + 基本名稱 + 副檔名)。
 
$(SolutionName)
 解決方案的基本名稱。
 
$(SolutionFileName)
 解決方案的檔案名稱(定義為基本名稱 + 副檔名)。
 
$(SolutionExt)
 解決方案的副檔名。它在副檔名的前麵包括“.”。
 
$(TargetDir)
 產生的主輸出檔案的目錄(定義為磁碟機 + 路徑)。它包括尾部的反斜線“\”。
 
$(TargetPath)
 產生的主輸出檔案的絕對路徑名(定義為磁碟機 + 路徑 + 基本名稱 + 副檔名)。
 
$(TargetName)
 產生的主輸出檔案的基本名稱。
 
$(TargetFileName)
 產生的主輸出檔案的檔案名稱(定義為基本名稱 + 副檔名)。
 
$(TargetExt)
 產生的主輸出檔案的副檔名。它在副檔名的前麵包括“.”。
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.