代码之家  ›  专栏  ›  技术社区  ›  johnc

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

  •  6
  • johnc  · 技术社区  · 16 年前

    我现在经常使用一些“helper”样式的扩展方法 (它们大多很简单、直观,而且是为善而不是为恶而工作的,所以请不要把这归结为我是否应该使用它们的讨论)。 它们在很大程度上扩展了核心.NET CLR类。

    目前,我必须将保存扩展方法的“extension methods.cs”文件复制到解决方案中的每个新项目,以便能够在多个项目中使用它们。

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

    编辑 虽然“专用项目”的答案是完全正确的,但我选择了马西达,因为我更喜欢他给出的方法。谢谢所有的答案,我已经把它们都修改了,因为它们都是很好的答案。

    5 回复  |  直到 16 年前
        1
  •  9
  •   Mark Cidade    16 年前

    如果不希望只为扩展方法创建整个项目,则可以将同一文件链接到单独的项目中,而不复制该文件:

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

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

        3
  •  2
  •   Community Ramakrishna.p    7 年前

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

    只需注意版本控制,例如,当其他应用程序试图更改扩展项目时,应该重新测试使用该方法的所有项目。

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

        4
  •  1
  •   yfeldblum    16 年前

    为扩展到.NET平台创建一个项目,并在每个应用程序项目中引用该项目。不言而喻:任何平台的东西,只有平台的东西,都在那个项目中;应用程序的东西在你的应用程序项目中。

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

        5
  •  0
  •   Csaba Toth    11 年前

    有几个答案表明,有人会将扩展函数放入一个公共程序集中。这是正确的答案。但对于初学者来说,有一件奇怪的事情:智能感知无法提供足够的帮助。 假设我把 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?) 如果你在问题上徘徊 替代品 打电话,您将无法获得自动包含正确使用语句的报价。有人可能会认为他/她做错了什么。但是,什么都不是,您只需要知道扩展方法在哪里,并且您必须手动为方法的命名空间键入using语句。在你正确的理解之后,你的源代码将被编译。