針對2.0,3.0,3.5,4.0和4.5的單個.NET程序集如何同時支持C#和VB.NET使用者的擴展方法?在.NET 2.0中使用擴展屬性的Escape Catch-22
標準的建議是補充一點:
namespace System.Runtime.CompilerServices
{
public sealed class ExtensionAttribute : Attribute { }
}
這種做法通過more比one Microsoft employee建議,並甚至在MSDN magazine特色。它的widely被many bloggers稱爲「沒有不良影響」。
哦,除了它會導致從.NET.NET 3.5或更高版本的VB.NET項目編譯器錯誤。
Microsoft.Core.Scripting.dll figured it out的作者,並改變「公」到「內部」。
namespace System.Runtime.CompilerServices
{
internal sealed class ExtensionAttribute : Attribute { }
}
這似乎解決了VB兼容性問題。
所以我滿懷信心地使用這種方法爲widely-used ImageResizing.Net library的最新版本(3.2.1)。
但是然後,我們開始針對某些針對.NET 3.5+的用戶或多或少地隨機獲取此編譯器錯誤(original report)。
Error 5 Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'
由於的MSBuild /編譯VisualStudio中顯然不懶得看作用域規則解決命名衝突時,和裝配引用的順序播放一個不很-docuemented角色,我不完全理解爲什麼當發生這種情況。
有一個few hacky workarounds,如更改程序集名稱空間,重新創建項目文件,刪除/讀取System.Core和擺弄目標版本的.NET框架。不幸的是,這些解決方法中沒有一個是100%(除了別名,但這是一個令人無法接受的痛苦)。
如何解決這一點的同時
- 維持所述組件內擴展方法使用支持,
- 用於.NET 2.0/3.0
- 不需要爲每個.NET框架版本的多個組件維護支持。
或者,是否有一個修復程序,使編譯器注意範圍規則?
上,這樣纔不會回答這個問題
- C# Extension methods in .NET 2.0
- Using Extension Methods with .NET Framework 2.0
- strange warning about ExtensionAttribute
- Ambigious reference for ExtensionAttribute when using Iron Python in Asp.Net
- Should I support .NET 2.0?
- Using extension methods in .NET 2.0? 相關問題
呃。你的賞金缺少零。最好與微軟支持部門合作,儘管他們可能會用'不支持'來解僱它。 –