2008-10-02 56 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语句。你得到这个权利后,你的源代码将被编译。

相关问题