2010-09-15 30 views
9

Có ai biết làm thế nào để thực hiện một tùy chỉnh BCL làm việc với các cổ phiếu CLR? Làm thế nào để khám phá hiện có quan hệ thiết yếu nhất giữa CLR và BCL và tái sử dụng chúng?Cách tạo thư viện lớp cơ sở .NET tùy chỉnh (BCL) aka thay thế mscorlib?

Dưới đây là những gì tôi có cho đến nay: http://lightnet.codeplex.com

+1

Tại sao bạn muốn làm điều đó? Nếu bạn muốn thực hiện thay thế, bạn có thể xem Mono. –

+0

Mono không phải là một lựa chọn. Tôi muốn thực hiện trọng lượng nhẹ của riêng tôi :) Có rất nhiều kịch bản mà khung như vậy có thể là một sự phù hợp lý tưởng. Ví dụ, nơi bạn cần tạo một nền tảng phát triển tùy chỉnh có kiến ​​trúc khác quá nhiều so với triển khai Microsoft .NET. –

+0

Còn về khung công tác nhỏ gọn thì sao? –

Trả lời

5

Với các ý kiến, có vẻ như bạn muốn sử dụng CLR chứng khoán với một BCL tùy chỉnh.

I cao nghi ngờ điều đó sẽ hiệu quả. CLR và BCL có khả năng có một vài mối quan hệ với nhau - họ sẽ thực hiện một số kỳ vọng thực hiện nhất định, và dựa vào chúng, không phải là không hợp lý. Ví dụ, CLR có thể dựa vào một số loại nội bộ mà bạn không biết.

Tôi sẽ ngạc nhiên một cách hợp lý nếu bạn quản lý CLR cổ phiếu để làm việc với việc triển khai BCL của riêng bạn, mặc dù nó có thể đơn giản hơn để triển khai BCL tùy chỉnh để làm việc với thời gian chạy đơn - ít nhất là bạn có thể gỡ lỗi những gì đang xảy ra nếu bạn gặp vấn đề.

+0

+1: Tôi sẽ cố gắng giải quyết các mối quan hệ quan trọng nhất trong một thời gian. Tôi biết một số người có thể làm điều đó khiến tôi cảm thấy rằng đó là một vấn đề có thể giải quyết được. –

+0

@Koistya: Một vấn đề là ngay cả khi bạn * có thể * giải quyết nó, bạn cũng có thể bị phá vỡ bởi một hotfix hoặc một bản phát hành CLR mới. –

+0

Chỉ cần suy nghĩ .. có một đối số trình biên dịch/nostdlib Tại sao Microsoft sẽ hiển thị nó ngoài khả năng viết BCL tùy chỉnh và biên dịch nó với CLR gốc ... –

0

Thậm chí nếu bạn có thể viết BCL của riêng mình, bạn sẽ nhận được bất kỳ mã nào khác để sử dụng nó? Tất cả các mã như vậy được xây dựng dựa trên BCL thực tế và hy vọng các tên mạnh được sử dụng trong các hội đồng BCL.

+0

Lý tưởng là sẽ không có bất kỳ mã nào khác. Tất cả các mã sẽ được xây dựng xung quanh BCL tùy chỉnh này. –

+0

Vì vậy, bạn sẽ không sử dụng bất kỳ phần nào khác của .NET? Nó phụ thuộc vào BCL. –

+0

Tôi sẽ sử dụng các phần khác của .net để gỡ lỗi mục đích thử nghiệm chỉ tại thời điểm này. Để làm điều đó, tôi đang cố gắng để biên dịch một hội đồng sử dụng tùy chỉnh BCL với '/ tham chiếu: MyBCL = Hệ thống' cờ http://msdn.microsoft.com/en-us/library/yabyz3h4.aspx –

6
  • Check-out Script#, một toolchain để biên dịch C# để Javascript mà đã được viết bởi một người làm việc tại Microsoft và được sử dụng trong nội bộ đối với một số ứng dụng web của họ. Anh chàng làm điều đó bằng cách làm cho bạn biên dịch với/nostdlib và tham khảo BCL tối thiểu được thực hiện lại của mình. Sau khi một hội đồng được sản xuất, một công cụ phản ánh thông qua nó và biến nó thành Javascript. Ông sử dụng BCL được thực hiện lại để cho phép gỡ lỗi chính xác và ngăn bạn sử dụng các tính năng của BCL không có ý nghĩa trong ngữ cảnh Javascript. Nó trông giống như mã của bạn hiện nay, bao gồm thực tế là hầu hết các lớp học hoặc là trống rỗng bản thân hoặc chỉ có một vài phương pháp trống. Điều này là do việc thực hiện các lớp/phương thức của BCL là trong Javascript, thay vào đó.

  • Đây có thể là mỏ khai thác bằng sáng chế. Tôi đã học điều này với vụ kiện gần đây của Oracle: bạn chỉ được bảo vệ theo lời hứa của cộng đồng nếu bạn triển khai BCL cho spec (mặc dù, không giống Java, bạn không phải thực hiện CLR cùng với nó. tự do hơn Java). Tôi nghĩ đây là một ý tưởng tuyệt vời có thể hữu ích trong nhiều tình huống; Tôi có thể tưởng tượng bản thân mình bằng cách sử dụng này thay vì một DSL, hoặc thay vì nhúng một ngôn ngữ kịch bản, hoặc thay vì pedantically lo lắng về bảo mật mã trong kiến ​​trúc plugin của tôi. Nhưng hãy nghĩ về quan điểm của Microsoft - nếu họ cho phép miễn trừ bằng sáng chế cho BCL không tuân thủ, điều gì sẽ ngăn ai đó gọi sản phẩm độc quyền của họ là "triển khai BCL không tuân thủ" và gặt hái được miễn?

+0

Điểm tốt. Cảm ơn các đầu vào. –

1

Hy vọng đây không phải là một chủ đề cổ tôi đang đào lên, nhưng tôi không thấy một năm; giả sử nó từ một hoặc hai tháng trước (khoảng tháng 9 '10) ...

Dù sao, điều này nghe có vẻ vô ích đối với tôi ngoài mục đích học tập và chỉ có niềm vui/học tập. Và tôi sẽ nghi ngờ nó sẽ thất bại trừ khi bạn sử dụng một trình biên dịch ngược để xem giao diện bên trong của BCL là như thế nào và đảm bảo rằng việc thực hiện của bạn đáp ứng những gì CLR mặc định mong đợi; cách khác, hãy xem triển khai Mono.

Tôi nghĩ nó vô dụng vì mục đích thực tế bởi vì Microsoft .NET BCL là một triển khai cực kỳ mạnh mẽ, và tôi nghi ngờ một người hoặc một nhóm nhỏ có thể làm tốt hơn. Cần trọng lượng nhẹ? Đó là những gì.Thời gian chạy NET CE là dành cho và hoạt động tốt trên các thiết bị nhỏ. Ai đó cũng đã đề cập đến .NET MF (Micro Framework); và đó là một MF'er trọng lượng nhẹ nếu tên công lý. :)

Cách duy nhất tôi thấy việc sử dụng thực tế cho điều này là nếu bạn hoàn toàn thực hiện lại CLR/CLI/CLS (và chính "CL-mọi thứ") và thực hiện .NET của riêng bạn. cho một số nền tảng khác.

EDIT: Lưu ý, nếu bạn sử dụng bất kỳ phần nào khác của .NET, BCL tiêu chuẩn được sử dụng bởi nó; vì vậy bạn sẽ không loại bỏ nó và nó vẫn sẽ là cần thiết. Điều xấu nếu bạn đang cố gắng chạy trên nền tảng nơi triển khai .NET chuẩn không tồn tại, nhưng tôi không nghĩ đó là những gì bạn đang làm ...

+0

+1: Đầu vào tốt, cảm ơn nhận xét. –

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