【问题标题】:Define a .NET extension method with solution scope定义具有解决方案范围的 .NET 扩展方法
【发布时间】:2008-10-02 03:44:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net extension-methods


    【解决方案1】:

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

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

    【讨论】:

    • 我多年来也一直在这样做,与使用共享程序集相比,为我省去了很多麻烦
    【解决方案2】:

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

    【讨论】:

    • 如果您想在同一个解决方案中使用多个项目的扩展功能,那么为什么您建议使用二进制引用?在这种情况下,您应该使用项目参考。这也是打开人们用例的主题:“解决方案中的每个新项目”。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        几个答案表明有人会将扩展函数放入一个通用程序集中。这是正确的答案。但是对于初学者来说有一件奇怪的事情:IntelliSense 无法提供足够好的帮助。 假设我用ReplaceRange 函数/方法扩展了ObservableCollection。 在移动扩展函数的类之后,首先编译器会说 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 语句。在你做对之后,你的源代码将被编译。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-31
          • 1970-01-01
          • 2011-07-06
          • 2013-01-18
          • 2011-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多