2008-10-02 62 views
6

我有幾個'幫助'樣式擴展方法,我現在使用相當經常(它們大多非常簡單,直觀,適合善良而非惡魔,所以請不要這下降到圍繞我是否應該使用它們的討論)。他們在很大程度上擴展了.NET CLR核心類。定義一個帶解決方案範圍的.NET擴展方法

目前,我必須將包含我的擴展方法的'ExtensionMethods.cs'文件複製到解決方案中的每個新項目,以便能夠在多個項目中使用它們。

是否有可能定義一個解決方案中的多個項目工作的擴展,或者將它們包裝在一個'擴展'dll中,或者它們被限制在項目的範圍?

編輯雖然'專門的項目'的答案是完全有效的,我選擇馬克西達的,因爲我更喜歡他給的方法。感謝所有迄今爲止的答案,並且我將它們都修改了,因爲它們都是很好的答案

回答

9

如果你不想創建只是爲了擴展方法一個整體項目,您可以鏈接在同一個文件到單獨的項目而不復制文件:

  1. 在解決方案資源管理器中,選擇目標項目。
  2. 選擇項目菜單。
  3. 選擇添加現有項目。
  4. 在「添加現有項目」對話框中,選擇要鏈接的項目。
  5. 從打開按鈕下拉列表中選擇添加爲鏈接。
+0

我多年來一直這樣做,爲我節省了很多麻煩,與使用共享程序集相比 – faulty 2008-10-02 04:19:22

5

最好的方法是將它們全部放在一個項目中並創建一個DLL。然後,您可以將該項目作爲項目引用加入,或將該DLL作爲二進制引用(可能是更好的選擇)。

+0

如果你想在**相同的解決方案**中使用多個項目的擴展函數,那麼_why_你建議二進制引用嗎?在這種情況下,您應該使用項目參考。這也是開放人員用例的主題:「解決方案中的每個新項目」。 – 2013-04-05 21:29:29

2

您可以將您的擴展程序放在單獨的項目中,並將該項目包括到您製作的每個新解決方案中。

只需小心版本控制,例如,當其他應用程序試圖對擴展項目進行更改時,那麼所有使用該方法的項目都應該重新測試。

Scott Dorman is correct in his post too:如果你不想讓它們改變,你可以把它們編譯成一個你在新項目中包含的DLL庫(而不是包括一個未編譯的項目)。

1

爲您的.NET平臺擴展創建一個項目,並在每個應用程序項目中引用一個項目。毫無疑問,任何和所有平臺的東西,只有平臺的東西,都在這個項目中;應用程序的東西進入你的應用程序項

您也可以查看各種平臺庫,如Umbrella,它們提供了基本平臺的擴展套件。

0

幾個答案表明有人會把擴展功能放到一個普通的程序集中。這是正確的答案。但對於初學者來說有一個奇怪的事情:智能感知無法幫到很好。假設我將ObservableCollection擴展爲ReplaceRange函數/方法。 移動擴展函數的類後,首先編譯器會說 error CS1061: 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' does not contain a definition for 'ReplaceRange' and no extension method 'ReplaceRange' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' could be found (are you missing a using directive or an assembly reference?) 如果您隨後將鼠標懸停在有問題的ReplaceRange調用上,那麼您將無法自動包含正確的using語句。有人可能會認爲他/她做錯了什麼。然而,沒有什麼是,你只需要知道你的擴展方法在哪裏,你必須手動爲方法的命名空間鍵入using語句。你得到這個權利後,你的源代碼將被編譯。