2009-05-05 31 views
8

Tôi có thể thêm tham chiếu đến System.Core.dll (.net 3.5) vào ứng dụng .net 2.0 không và sử dụng nóTôi có thể thêm tham chiếu đến System.Core.dll (.net 3.5) vào ứng dụng .net 2.0 và sử dụng nó

tôi cố gắng để sử dụng lớp TimeZoneInfo trong đó có sẵn trong .net chỉ 3.5, bằng cách tham khảo System.Core.dll

Ngoài ra, rất cần thíêt một thay thế cho TimeZoneInfo trong .net 2.0 (hoặc một lớp tùy chỉnh)

+0

Tại sao bạn không nâng cấp lên .net 3.5? – Graviton

+7

Mkay, thats không phải luôn luôn thực tế cho tất cả mọi người – Sameer

+0

Lưu ý rằng TimeZoneInfo nằm trong mscorlib.dll, không phải trong System.Core.dll –

Trả lời

11

Không bạn thực sự không được. Bạn phải cài đặt 3.5 trên máy mục tiêu hoặc bạn sẽ gặp phải hành vi không thể đoán trước trong chương trình đang chạy. Khung công tác 3.5 bao gồm System.Core.dll phụ thuộc vào một số sửa lỗi/tính năng được thêm vào CLR 2.0 SP1 (đây là một phần của khung công tác 3,5). Nếu bạn chạy với một CLR chưa được vá, bạn sẽ chủ yếu chạy mã chưa được kiểm tra và có khả năng sẽ xảy ra một số lỗi.

+2

Bạn chắc chắn có đủ điều kiện về chủ đề này hơn hầu hết, nhưng tôi có thể đề xuất * không nên * thay vì *không thể*? –

+1

@Rex, tôi đã đổi thành "không nên". Tôi thêm vào không thể ban đầu bởi vì tôi đã tìm ra một vấn đề pháp lý tại sao bạn không thể triển khai. Nhưng tôi không phải là luật sư vì vậy tôi đã hủy bỏ đơn giản ý kiến ​​lập trình của tôi về bạn "thực sự" không nên làm điều này :). – JaredPar

3

Tôi không chắc chắn nếu bạn có thể làm điều này với System.Core.dll, nhưng chúng tôi đã làm điều này trước khi với các dll Linq2Sql cho một ứng dụng .net 2.0. .net 3.5 sử dụng cùng một phiên bản của CLR với các assembly mới được xây dựng trên thời gian chạy .net 2.0. Nếu bạn có thể nhận được tất cả các phụ thuộc, nó có thể hoạt động. Như tôi đã nói, điều này làm việc cho chúng tôi với các dll Linq2Sql, nhưng không được đảm bảo cho tất cả các kịch bản. (Ví dụ, bạn có thể sẽ không thể có được WPF để chạy trên Windows 2000, nhưng bạn có thể có được LINQ để đối tượng để làm việc)

6

Scott Hanselman wrote a blog post describing làm thế nào để chạy một phiên bản đầu của MVC trên khuôn khổ 2.0 . Ông lưu ý rằng các phụ thuộc vào System.Core có lẽ sẽ là là OK miễn là bạn rất cẩn thận không gọi bất kỳ thói quen nào phụ thuộc vào các tính năng CLR cụ thể cho 3.0+ (ví dụ, LINQtoSQL).

Ông đúng dán các bài viết trên blog với kỹ khuyến cáo rằng đó là không được hỗ trợ, nó rất tốt có thể không làm việc cho bạn, nhưng ông đã nhận nó để làm việc và nếu bạn có thể, sau đó Yay cho bạn.

0

.net 3.5 chạy trên thời gian chạy .net 2.0. Vì vậy, bạn sẽ có thể sử dụng nó ... Nhưng tham chiếu một dll duy nhất sẽ dẫn đến hành vi bất ngờ như bạn không biết tất cả các phụ thuộc system.core.dll có .... Tôi muốn khuyên bạn không nên làm điều đó ...

0

Bạn có thể làm điều này, hiện đang làm điều tương tự cho một công cụ cho công việc - cũng để sử dụng các công cụ TimeZoneInfo. Miễn là thats tất cả các bạn đang sử dụng bạn không nên chạy vào bất kỳ vấn đề (ít nhất là tôi đã không).

Tuy nhiên, tôi không hoàn toàn chắc chắn về tính hợp pháp của gói System.Core với ứng dụng của bạn. Từ những gì tôi biết bạn không được phép.

Tôi đã sử dụng một từ Mono cho công cụ sử dụng công cụ đó.

+0

Chỉ cần lưu ý xung quanh vấn đề này: bạn có thể gặp vấn đề xung quanh việc ký kết hội đồng, nhưng nhiều hơn đến điểm Mono yêu cầu tệp TZ mà nó phân tích - bạn cần đặt vị trí cho các tệp này để làm cho nó hoạt động (thuộc tính tĩnh trên TimeZoneInfo thực hiện điều này: TimeZoneDirectory). Bạn có thể lấy các tệp này tại đây: ftp://elsie.nci.nih.gov/pub Các tệp này là Miền công cộng trong trường hợp bất kỳ ai lo lắng về giấy phép xung quanh chúng – saret

Các vấn đề liên quan