2009-06-10 158 views
30

可以在項目中以兩種方式添加引用。項目參考Vs文件參考?

  1. Project Reference。
  2. 文件參考。

但是,何時使用Project以及何時使用File引用?

回答

32

沒有指定,但我猜你指到Visual Studio?

項目引用和文件引用之間的主要區別是實時更新是否可用。在項目參考中,您將能夠通過Intellisense等項目立即在其他項目中看到一個項目中的編輯效果。因此,如果您例如添加名爲Foo的類,則此類型將立即顯示在任何具有該項目上的項目引用的項目中的intellisense中。

另一方面,文件引用只能看到磁盤上存在的更改。必須執行編譯並將位寫入磁盤以查看更改。

通常,最好使用項目參考。

需要考慮的另一個角度是項目的相關語言。如果兩個項目中的語言都相同,則Project to Project引用最有用。如果語言不同,他們往往被視爲比文件引用更像項目引用。

+0

還「去定義」(F12)在2之間有所不同 - 你可能無法做到到F12並去定義所有的文件引用 - 或者至少多數民衆贊成在我所經歷的 – 2016-05-16 11:34:40

5

使用「項目參考」在解決方案中添加對組件的引用。

使用「文件引用」添加一個引用到交叉的解決方案組件

Source

0

最後,所有引用都是文件引用,Project Reference只是一個Visual Studio功能,它正在引用正在使用您的解決方案構建的文件,因此無論何時您構建新構建,引用是自動更新而不去你的副本&粘貼文件

0

我去文件參考(即使當我有源代碼或自己創建程序集)的原因是當特定程序集沒有改變很多(說每半年一次)。只是爲了削減一些建設時間。另外,有些項目會自動增加版本號(例如,嘗試在解決方案中包含AjaxControlToolkit項目)。

+1

我認爲這是可怕的,因爲它使它很容易意外地使用陳舊的相關庫代碼。 – 2009-06-10 05:56:13

9

我只是通過這個去...

我們收到來自供應商,約53個不同VS2005 C#解決方案文件創建63名不同項目的.dll,所有這一切都是由一個獨立的,商業應用調用。

所有項目都包含對其他項目的dll的文件引用。

這種方法的問題很好:解決方案間的依賴關係幾乎不可能解決,涉及到「findstr」命令的lot; VS的「查找定義」功能找不到文件引用dll的源代碼,它只會顯示dll中函數的定義;因爲更改而重新構建時容易出錯,麻煩並涉及開放許多不同的解決方案來重新構建整個dll集。

我花了數週將53個不同的解決方案文件合併爲一個,然後花費更多時間將所有文件依賴項更改爲項目依賴項。現在,當你「找到定義」時,你將被帶到一個源文件。現在,當您更改低級別項目時,所有相關項目都將在構建(一個)解決方案時生成。

我做了一些額外的更改,但最方便的是將所有獨立項目的構建目錄設置爲solutiondir/bin。這樣,所有的DLL最終都集中在一個地方。

哦,是的:我還爲所有引用的項目dll設置了'copy local'爲'no'。這樣,每個DLL出現在解決方案目錄/bin中,因爲項目已建好,並且在下一個要構建的項目中找到。

我們現在唯一的問題是,如果我改變一個項目作爲另一個項目的數據源使用Windows窗體,那麼Windows窗體將不會在Designer中打開,直到我重新構建作爲數據源的項目爲表格。一個小的,小的價格來支付項目參考的所有好處。另外,我必須從svn結帳時創建解決方案,因爲dll不在svn中。在上述情況下,數據源.dll不存在供Designer查找。

+0

也許,更好地使用csproj中的最小解決方案和postbuild事件,以便在SharedLibs文件夾中複製dll和pdb。該文件夾位於TFS(svn,源代碼管理)中。 – Kiquenet 2010-09-19 21:31:34

0

重建項目時,項目引用它的所有項目也會自動重建。

這不適用於文件引用。

0

實際上這兩種方法都使用文件引用。該項目的參考是有用的VS知道什麼時候被引用VS項目應建立

小號

2

我我們專門設置了我們的開發團隊使用File引用而非Th一個項目在大多數情況下是可以參考的: 我們在一個高度完整的領域運營。因此,每個不是的組件直接這部分工作(即在其他項目中共享的內容)不應該被改變。 因此,我們的想法是(在理想的非綠地工作中),我們從網絡上的發佈區域獲取經過測試,授權的已知版本的子組件,並將它們包含在解決方案的組件區域中。

這是爲了簡化維護和測試,因爲它應該避免許多類似的版本激增,所有版本都有不同的版本或SVN編號。

第二個原因(可能是我的C/C++背景)是我想知道我使用的是全部Debug或所有發行版本。在.NET項目中你不能輕鬆做到這一點。我們構建出一個components \ $ configuration $目錄,然後進行構建後步驟,從components \ $ configuration $複製到上面的目錄中。 所有文件引用都是在組件目錄中的文件,意思是(我相信)我們確實在整個鏈中都有調試和發佈版本。

如果您發貨到外部,我認爲您需要考慮外出的DLL需要與所有用戶相同,否則您有可能無法在以後輕鬆調試問題(配置從源代碼跟蹤到提供的可執行文件)

2

我遇到了多個項目的問題,其中文件引用只是不切它。陳舊的參考文獻會導致buku問題。微軟建議,我們只使用必要的文件引用:

http://msdn.microsoft.com/en-us/library/ee817675.aspx

+1

RE:「實際上這兩種方法都使用了文件引用,項目引用對於VS知道什麼時候應該構建引用VS項目很有用......」問題是,沒有項目引用,外部引用不會重建,除版本衝突之外,簽名將是相同的,並且只有通過反覆試驗才能檢測到深度較深的兩個庫。 – CZahrobsky 2011-12-05 23:35:33

0

一個錯誤(C1083)切換到引用時(&去除相對包括)是我有「頭沒有找到。」我:

    偏好
  • 包括目錄:../../src/module
  • 源代碼:#include "file.h"

修復的相對路徑,它的工作:

#include "module/file.h"