Vì nhiều lý do khác nhau, tôi thường thấy viết mã tương thích với .NET framework 2.0 hoặc 3.5 hoặc tương thích với .NET Compact Framework, nhưng vấn đề là có rất nhiều tính năng "nhỏ" trong các framework .NET mới. không có sẵn trong các khung công tác cũ hơn hoặc Compact Framework."Gói Tương thích" để quay lại các tính năng .NET Framework mới?
Ví dụ: tôi thấy các phương pháp tiện ích thực sự hữu ích, nhưng trình biên dịch phụ thuộc vào System.Runtime.CompilerServices.ExtensionAttribute
cho việc này. Bạn có thể dễ dàng tự xác định thuộc tính này và sau đó sử dụng các phương thức mở rộng trong .NET Framework 2.0 (trong C# 3.0+). Tương tự như vậy, không quá khó để xác định một cách thủ công các kiểu .NET 4 nhỏ như Tuple<T1,T2>
và Lazy<T>
. Nhân tiện, nếu bạn muốn sử dụng LINQ trong .NET 2.0, bạn có thể sử dụng LinqBridge.
Bây giờ giả sử bạn thực hiện công khai ExtensionAttribute
để các hội đồng khác mà bạn viết có thể sử dụng. Đó là tốt lúc đầu, nhưng nếu bạn sau đó muốn sử dụng một thư viện bên thứ 3 cũng có ý tưởng tương tự? Bạn thêm một tham chiếu đến thư viện đó và bây giờ bạn đã có một va chạm tên. Rất tiếc.
Tôi cũng nhận thấy rằng một số thư viện mới chỉ có sẵn cho .NET 4.0 hoặc 3.5 mặc dù chúng chỉ phụ thuộc vào nó có thể được giải quyết bằng gói tương thích hoặc LinqBridge. Nó sẽ chắc chắn là tốt đẹp nếu có "gói tương thích" cho các phiên bản .NET cũ hơn đã định nghĩa các tính năng nhỏ này trong một DLL nhỏ mà bạn có thể biện minh bao gồm trong các dự án có kích thước bất kỳ. Có một điều như vậy tồn tại?
Cập nhật: Đánh giá bởi sự im lặng, tôi đoán không có điều như vậy. Tôi có thể tự mình làm một thư viện OSS nếu có sự quan tâm. Vì vậy, câu hỏi mới của tôi là, những gì nhỏ hơn tính năng của .NET 4 (như trái ngược với quái vật như WCF/WPF) bạn sẽ bỏ lỡ nếu bạn đang viết cho .NET 2, .NET 3.5, .NETCF hoặc Silverlight? Tôi sẽ bắt đầu danh sách đi ...
ExtensionAttribute
(không trong .NET 2)Func<...>
vàAction<...>
đại biểu (không có trong .NET 2)- LINQ-to-đối tượng (không phải trong. NET 2)
Tuple<...>
(không trong .NET 3,5)Lazy<T>
vàLazy<T,TMetadata>
(không có trong .NET 3.5)- Trees Biểu hiện (không có trong .NET 2; không đầy đủ trong .NET 3.5)
- Biến đổi Generics (tồn tại trong .NET 2 nhưng không thể truy cập từ C# 3 và VB 9)
Reflection.Emit
(thiếu từ .NETCF; không thực sự là một tính năng nhỏ nhưng tôi nhớ nó rất nhiều)
Tôi đã có thể biên dịch [dotNetLiquid] (http://dotliquidmarkup.org/) cho .Net 2.0 bằng Thư viện Theraot, và tất cả các bài kiểm tra đơn vị của họ đều thành công (tốt, ngoại trừ một - nhưng điều đó không thành công ngay cả khi tôi xây dựng .net 4). Sử dụng [LinqBridge] (http://www.albahari.com/nutshell/linqbridge.aspx) là không đủ vì nó không hỗ trợ các biểu thức. – anikiforov