怎么能一个.NET程序集,靶向C#和VB.NET消费者2.0,3.0,3.5,4.0和4.5的同时,支持扩展方法?
标准的建议是补充一点:
namespace System.Runtime.CompilerServices
{
public sealed class ExtensionAttribute : Attribute { }
}
这种做法被认为更比一个微软员工 ,并甚至在特色MSDN杂志 。 它广泛被喻为许多博客因为有“没有不良影响”。
哦,除了会引起从VB.NET工程目标.NET 3.5或更高的编译器错误。
Microsoft.Core.Scripting.dll的作者想通了 ,并改变了“公”到“内部”。
namespace System.Runtime.CompilerServices
{
internal sealed class ExtensionAttribute : Attribute { }
}
这似乎解决了VB兼容性问题。
所以,我满怀信心地用于最新版本(3.2.1),该方法被广泛使用的ImageResizing.Net库 。
但后来 ,我们开始收到此编译器错误( 原报告 ),或多或少随机,对某些用户针对.NET 3.5+。
Error 5 Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'
由于的MSBuild /编译VisualStudio中显然不打扰解决命名冲突的时候看的作用域规则和程序集引用的顺序播放一个不很-docuemented角色,我不完全理解当这种情况发生的原因和。
这里有几个哈克变通办法 ,如改变程序集命名空间,重新创建项目文件,删除/ readding System.Core程序,并与.NET Framework的目标版本摆弄。 不幸的是,没有这些解决方法是100%(除了混叠,但是这是无法接受的疼痛)。
我怎样才能解决这个问题,而
- 保持组件内,用于扩展方法使用支持,
- 用于.NET 2.0 / 3.0维持支持
- 不要求每个.NET framework版本的多个组件。
或者,是否有修补程序,以使编译器要注意作用域规则?
在这样才不会回答这个问题相关的问题
- 在.NET 2.0 C#扩展方法
- 使用与.NET Framework 2.0的扩展方法
- 约ExtensionAttribute奇怪的警告
- 在Asp.Net使用铁的Python时ExtensionAttribute Ambigious参考
- 我应该支持.NET 2.0?
- 使用.NET 2.0中的扩展方法?