2010-03-14 39 views
5

Tôi biết đó là Windows PE32, nhưng tôi cũng biết rằng đơn vị triển khai trong .NET là một hội đồng mà lần lượt có một tệp kê khai và có thể được tạo thành từ nhiều mô-đun được quản lý.Mô-đun được quản lý .NET là gì?

Câu hỏi của tôi là:

1) Làm thế nào bạn sẽ tạo ra nhiều mô-đun quản lý khi xây dựng một dự án như một lib lớp hoặc một ứng dụng giao diện điều khiển, vv

2) Có cách nào để xác định này để trình biên dịch (thông qua các thuộc tính dự án chẳng hạn) để phân vùng các tệp mã nguồn của bạn thành nhiều mô-đun được quản lý. Nếu vậy thì lợi ích của việc làm như vậy là gì?

3) Có thể quản lý các mô-đun span hội đồng?

4) Có phải tệp riêng được tạo trên đĩa khi mã nguồn được biên dịch hay được tạo ra trong bộ nhớ và được nhúng trực tiếp trong một hội đồng không?

EDIT:

@ Jon:

Đối 2): Vì vậy, không biên dịch/nguồn xây dựng trong visual studio luôn tạo một module quản lý duy nhất? Nếu vậy thì tôi không hiểu tại sao VS không cung cấp một cơ chế để làm như vậy mặc dù thực tế là NET hỗ trợ làm như vậy. Tôi đồng ý rằng sẽ không thể quản lý được để tạo một hội đồng với các mô-đun từ các ngôn ngữ khác nhau. Đó có phải là lý do duy nhất tại sao .NET cho phép tạo ra các mô-đun đa mô-đun? Tôi đọc trong CLR của Richter thông qua C#, mô-đun cũng có thể mở rộng cụm, và điều này có thể giúp giảm kích thước bộ nhớ bằng cách tải xuống theo yêu cầu khi chức năng nhất định được gọi lần đầu tiên, nhưng tôi không chắc tại sao một người muốn mở rộng một mô-đun qua các hội đồng, tại sao không chỉ tạo ra một hội đồng mới mà sự tạo ra implicity tạo ra một mô-đun mới trong tiến trình. Bạn vẫn sẽ đạt được những lợi ích tương tự.

Mục 4) liên quan đến tệp ".netmodule". Là một phần của quá trình xây dựng VS, tôi chưa thấy bất kỳ tệp ".netmodule" nào được tạo trong thư mục obj. Tôi thường nhận thấy tệp .pdb, .dll/.exe và tệp * FileListAbsolute và do đó câu hỏi về việc liệu có bất kỳ tệp riêng biệt nào được tạo cho các mô-đun được quản lý hay không.

EDIT: @Jon: Đây là trích đoạn từ CLR qua C# (ấn bản thứ 3) Pg 43: Có thể tôi đang hiểu sai điều này. có thể tải xuống theo yêu cầu.

"Ví dụ, lắp ráp có thể bao gồm nhiều loại. Bạn có thể đặt các loại được sử dụng thường xuyên trong một tệp và các loại ít được sử dụng hơn trong một tệp khác. Nếu lắp ráp của bạn được triển khai bằng cách tải xuống qua Internet, các tập tin với các loại được sử dụng không thường xuyên có thể không bao giờ phải được tải xuống cho khách hàng nếu khách hàng không bao giờ truy cập các loại. Ví dụ: nhà cung cấp phần mềm độc lập (ISV) chuyên về các điều khiển giao diện người dùng có thể chọn triển khai các loại Trợ năng hoạt động trong một mô-đun riêng biệt (để đáp ứng các yêu cầu về Logo của Microsoft) Chỉ những người dùng yêu cầu khả năng truy cập bổ sung các tính năng sẽ yêu cầu mô-đun này bị ngắt oaded.

Bạn định cấu hình ứng dụng để tải xuống tệp lắp ráp bằng cách chỉ định phần tử codeBase (được thảo luận trong Chương 3) trong tệp cấu hình của ứng dụng.Yếu tố codebase xác định một URL trỏ đến nơi mà tất cả các tập tin của một hội đồng có thể được tìm thấy "

Trả lời

6

1) Bạn không thể làm điều này trong Visual Studio Bạn có thể làm điều đó từ dòng lệnh sử dụng:..

csc /target:module Foo.cs Bar.cs 

Trong trường hợp này bạn sẽ kết thúc với một fle gọi Foo.netmodule

2) Xem câu hỏi 1 -. bạn không thể làm điều này từ Visual Studio, nhưng bạn có thể làm điều đó từ dòng lệnh tôi không EDIT: Tôi đồng ý với tuyên bố của Andrew rằng bạn có thể tạo ra một hội đồng từ nhiều ngôn ngữ theo cách này - nhưng tôi tin rằng nó sẽ là không thực tế. Bạn sẽ phải làm việc ra một chuỗi phụ thuộc thích hợp để bạn có thể xây dựng một mô-đun hoàn chỉnh đầu tiên, sau đó tiếp theo, vv ... tại thời điểm đó, tại sao không chỉ xây dựng các hội đồng riêng biệt ở nơi đầu tiên? Nó sẽ có hiệu quả là một miền truy cập phụ, thừa nhận ... nhưng đó là tất cả. Tôi tin rằng những bất lợi của điều này có khả năng lớn hơn những lợi thế trong hầu như tất cả các kịch bản. Nếu bạn thực sự muốn xây dựng một cụm duy nhất, bạn luôn có thể sử dụng ilmerge sau khi xây dựng các hội đồng riêng biệt. Vâng, trên lý thuyết một mô-đun đơn có thể được bao gồm trong nhiều hội đồng, nhưng không có điểm nào trong việc làm như vậy - nó sẽ tạo ra một hệ thống rất khó hiểu.

4) Tôi không thực sự chắc chắn ý bạn là gì. Visual Studio tạo một số tệp trung gian trong thư mục obj, nếu đó là ý của bạn. Trình biên dịch dòng lệnh không để lại bất kỳ tệp phụ nào nằm xung quanh, nhưng nó có thể tạo các tệp trung gian mà nó xóa khi hoàn thành - tôi thực sự không biết.

EDIT: Tôi không tin VS xây dựng mô-đun làm bước trung gian. Biên dịch trong Visual Studio luôn tạo ra một assembly cho mỗi dự án, và assembly đó có một module duy nhất. Khi bạn nói rằng CLR thông qua C# nói rằng "mô-đun có thể span cụm" bạn có chắc bạn không có nghĩa là hội đồng có thể span nhiều mô-đun? Bạn có thể tải xuống mô-đun của hội đồng theo yêu cầu, nhưng không phải theo cách khác. Nếu bạn có một tham chiếu cụ thể, tôi có thể tra cứu nó ...

+0

@Jon: Cảm ơn bạn đã trả lời. Tôi không có đủ ký tự để bao gồm nhận xét của mình trong không gian này vì vậy tôi đã thêm chúng vào bài đăng gốc. Thông tin chi tiết sẽ được đánh giá cao. –

+0

@Jon: Bạn nói đúng. cuốn sách không nói rằng một mô-đun có thể mở rộng các hội đồng. Tôi hiểu sai điều đó. nhưng nó nói rằng một module có thể được tải về theo yêu cầu. Tôi đã bao gồm đoạn trích từ CLR qua C# (ấn bản thứ 3) Pg 43 trong bài đăng gốc. –

5

Bạn không thể tạo mô-đun bằng cách sử dụng VS, nhưng bạn có thể thực hiện bằng trình biên dịch. Các mô-đun là các tệp riêng biệt trên hệ thống tệp, có thể có một số mô-đun trong một assembly được viết bằng các ngôn ngữ khác nhau.

EDIT: Ngoài ra, bạn có thể đặt các lớp hiếm khi được sử dụng trong các mô-đun riêng biệt. Các mô-đun như vậy sẽ chỉ được tải khi cần các lớp học.

+1

Điều đó thật thú vị ... tạo ra một hội đồng duy nhất từ ​​các ngôn ngữ phù hợp nhất cho vấn đề. –

+0

@Andrew: Nếu bạn đang gắn bó với chỉ một ngôn ngữ .NET, có bất kỳ lý do cụ thể/kịch bản nào trong đó nó sẽ có ý nghĩa để có nhiều mô-đun hội đồng? –

+0

@Abhijeet Patel: Tôi đã cập nhật câu trả lời. –

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