6

我有一些我现在经常使用的“帮助”风格的扩展方法(它们大多非常简单、直观,并且为善而不是邪恶工作,所以请不要让这陷入关于我是否应该使用它们的讨论)。它们在很大程度上扩展了核心 .NET CLR 类。

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

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

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

4

5 回答 5

9

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

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

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

于 2008-10-02T03:47:05.627 回答
2

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

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

Scott Dorman 在他的帖子中也是正确的:如果您不想更改它们,您可以将它们编译为一个 DLL 库,您可以将其包含在您的新项目中(而不是包含未编译的项目)。

于 2008-10-02T03:47:06.343 回答
1

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

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

于 2008-10-02T03:50:42.730 回答
0

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

于 2013-04-05T21:38:41.947 回答