【发布时间】:2009-04-23 19:15:50
【问题描述】:
在 Visual Studio 2008 下
我可以创建扩展方法以在 .NET Framework 2.0 项目下工作吗?
【问题讨论】:
-
查看[我的博客](colins-corner.blogspot.com/2009/01/…) 了解详情。
标签: c# visual-studio-2008 .net-2.0 extension-methods
在 Visual Studio 2008 下
我可以创建扩展方法以在 .NET Framework 2.0 项目下工作吗?
【问题讨论】:
标签: c# visual-studio-2008 .net-2.0 extension-methods
有一个ugly hack 可以让扩展方法在.Net 2.0 中工作;但最好将您的框架升级到 3.5。
简而言之(来自链接 #2):扩展方法只是带有 [Extension] 属性标记的普通静态方法。这个属性其实只是编译器在幕后添加的。在 .NET 3.5 中,它位于 System.Core 中,因此只需像这样定义您自己的属性:
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class ExtensionAttribute : Attribute
{
}
}
【讨论】:
当然。有一些 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 是否存在扩展语法问题。我想它会给你一些好处。
【讨论】: