【问题标题】:Using Extension Methods with .NET Framework 2.0在 .NET Framework 2.0 中使用扩展方法
【发布时间】:2009-04-23 19:15:50
【问题描述】:

在 Visual Studio 2008 下
我可以创建扩展方法以在 .NET Framework 2.0 项目下工作吗?

【问题讨论】:

标签: c# visual-studio-2008 .net-2.0 extension-methods


【解决方案1】:

有一个ugly hack 可以让扩展方法在.Net 2.0 中工作;但最好将您的框架升级到 3.5。

其他来源:12

简而言之(来自链接 #2):扩展方法只是带有 [Extension] 属性标记的普通静态方法。这个属性其实只是编译器在幕后添加的。在 .NET 3.5 中,它位于 System.Core 中,因此只需像这样定义您自己的属性:

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
  public class ExtensionAttribute : Attribute
  {
  }
}

【讨论】:

    【解决方案2】:

    当然。有一些 hacky 方法,但我使用的方法是从 Mono project 获取 System.Core,将其所有代码添加到我自己的解决方案中名为 System.Core 的新 .NET 2.0 类库中,然后重新编译它。有一些事情需要修复,比如将它们的 MonoTODO 属性更改为 TODO cmets,以及修复 AssemblyInfo.cs,但效果很好。我现在在 VS 2008 中编译的 2.0 项目中同时使用 LINQ 和扩展方法。

    假设您获得了 2.4 版本的 Mono 源代码,您应该在以下位置找到代码:

    <extracted directory>/mono-2.4/mcs/class/System.Core
    

    如果您卡在 VS 2005 中,您可以下载 SharpDevelop,使用针对 2.0 的 System.Core dll 构建您的 System.Core dll,添加对已编译程序集的引用,它可能会工作,但我不知道如果 VS 2005 是否存在扩展语法问题。我想它会给你一些好处。

    【讨论】:

    • 密钥是在 VS 2008 中编译的。我仍然坚持使用 VS 2005 :(
    • 我看到了 VS2008 标签,假设是 2008 年。如果你是 2005 年,你也许可以找到一个预编译的二进制文件,或者使用 SharpDevelop(我会更新一个链接)。如果您在 Win2K 中编译,那么不幸的是,您不走运,因为它不支持 3.5 框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2012-07-05
    • 1970-01-01
    • 2019-06-27
    • 2014-09-20
    • 2018-12-14
    相关资源
    最近更新 更多