使用解决方案范围定义.NET扩展方法

时间:2008-10-02 03:44:54

标签: .net extension-methods

我有一些'助手'样式扩展方法,我现在非常经常使用(它们大多非常简单,直观,并且为善而不是邪恶而工作,所以请不要将此问题放到讨论中或不是我应该使用它们。它们主要是扩展核心.NET CLR类。

目前,我必须将包含扩展方法的'ExtensionMethods.cs'文件复制到解决方案中的每个新项目中,以便能够在多个项目中使用它们。

是否可以定义扩展以在解决方案中处理多个项目,或将它们包装在“扩展”DLL中,还是仅限于项目范围?

编辑虽然“专门项目”的答案完全有效,但我选择了marxidad,因为我更喜欢他给出的方法。感谢到目前为止所有的答案,我已经将它们全部修改了,因为它们都是很好的答案

5 个答案:

答案 0 :(得分:9)

如果您不想仅为扩展方法创建整个项目,可以将同一文件链接到单独的项目而不复制文件:

  1. 在“解决方案资源管理器”中,选择目标项目。
  2. 选择“项目”菜单。
  3. 选择添加现有项目。
  4. 在“添加现有项目”对话框中,选择要链接的项目。
  5. 从“打开”按钮下拉列表中,选择“添加为链接”。

答案 1 :(得分:5)

最好的方法是将它们全部放在一个项目中并创建一个DLL。然后,您可以将该项目包含为项目引用,或将DLL包含为二进制引用(可能是更好的选择)。

答案 2 :(得分:2)

您可以将扩展程序放在一个单独的项目中,并将该项目包含在您正在制作的每个新解决方案中。

请注意版本控制,例如,当其他应用程序尝试对您的扩展项目进行更改时,应该重新测试使用该方法的所有项目。

Scott Dorman is correct in his post too:如果您不想更改它们,可以将它们编译为您在新项目中包含的DLL库(而不是包含未编译的项目)。

答案 3 :(得分:1)

为.NET平台的扩展创建一个项目,并在每个应用程序项目中引用该项目。不用说:任何和所有平台的东西,只有平台的东西,进入那个项目;应用程序的东西进入你的应用程序项目。

您也可以查看各种平台库,例如Umbrella,它们提供基础平台的扩展套件。

答案 4 :(得分: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语句。在你做对了之后你的源代码就会编译。