2010-06-04 44 views
163

Hội đồng .NET là gì? Tôi duyệt qua mạng và tôi không thể hiểu được định nghĩa.Hội đồng .NET là gì?

+10

Có một chi của [CLR Qua C#] (http://www.amazon.com/CLR-Via-C-Pro-Developer/dp/0735621632). Bạn sẽ biết tất cả về nó vào cuối. Tôi thực sự khuyên bạn nên tham khảo cuôn sach nay. –

Trả lời

147

Trong các thuật ngữ đơn giản hơn: Một đoạn mã (biên dịch trước) có thể được thực thi bởi môi trường chạy .NET. Một chương trình .NET bao gồm một hoặc nhiều assembly.

+4

giống như tệp Jar phải không? – KJW

+26

@KimJongWoo - Không, tệp Jar chỉ là một tệp zip chứa các tệp bytecode được biên dịch. Một assembly là một tệp PE (Portable Executable format) (ví dụ như một DLL hoặc EXE), nhưng về mặt khái niệm chúng phục vụ các mục đích tương tự. –

+0

Vì vậy, nó giống như một tệp '.class' trong thế giới Java? – mljrg

7

Xem this:

Trong khuôn khổ Microsoft .NET, một lắp ráp là một mã thư viện biên soạn một phần để sử dụng trong việc triển khai, versioning và an ninh

5

MSDN có một good explanation:

Hội đồng là các khối xây dựng của các ứng dụng .NET Framework; họ tạo thành đơn vị cơ bản của việc triển khai, kiểm soát phiên bản, sử dụng lại, phạm vi kích hoạt và bảo mật quyền. Hội đồng là bộ sưu tập các loại và tài nguyên mà được xây dựng để hoạt động cùng nhau và tạo thành một đơn vị chức năng logic . An lắp ráp cung cấp ngôn ngữ phổ biến thời gian chạy với thông tin cần thiết để biết về triển khai loại. Để thời gian chạy, một loại không tồn tại bên ngoài ngữ cảnh của một hội đồng.

8

Wikipedia đã nói:

Trong khuôn khổ Microsoft .NET, một lắp ráp là một biên soạn một phần đang thư viện để sử dụng trong việc triển khai, versioning và an ninh. Có hai loại : các cụm xử lý (EXE) và các thư viện (DLL). Một quá trình đại diện cho một quá trình mà sẽ sử dụng các lớp được xác định trong thư viện hội đồng. Các assembly .NET chứa mã trong CIL, thường là được tạo ra từ một ngôn ngữ CLI, và sau đó được biên dịch sang ngôn ngữ máy tại thời gian chạy bằng trình biên dịch CL2 just-in-time CLR. Hội đồng có thể bao gồm một hoặc nhiều tệp. Các tệp mã là được gọi là mô-đun. Một hội đồng có thể chứa nhiều hơn một mô-đun mã và vì có thể sử dụng các ngôn ngữ khác nhau để tạo ra các mô-đun mã về mặt kỹ thuật có thể sử dụng một số ngôn ngữ khác nhau để tạo ra một cụm . Tuy nhiên, Visual Studio có không hỗ trợ sử dụng các ngôn ngữ khác nhau trong một assembly.

Nếu bạn thực sự đã duyệt nó sẽ giúp đỡ nếu bạn muốn làm rõ những gì bạn không hiểu

49

Assemblies

Khi bạn biên dịch một ứng dụng, mã MSIL tạo được lưu trữ trong một hội,, tổ hợp . Tập hợp bao gồm cả hai tệp ứng dụng có thể chạy được mà bạn có thể chạy trực tiếp từ Windows mà không cần bất kỳ chương trình nào khác (có phần mở rộng tệp .exe) và thư viện (có phần mở rộng .dll) để sử dụng bởi các ứng dụng khác.

Ngoài chứa MSIL, hội đồng cũng bao gồm thông tin meta (có nghĩa là thông tin về thông tin có trong assembly, còn được gọi là siêu dữ liệu) và tài nguyên tùy chọn (dữ liệu bổ sung được MSIL sử dụng, chẳng hạn như tệp âm thanh và hình ảnh). Thông tin meta cho phép các assembly hoàn toàn tự mô tả. Bạn không cần thông tin khác để sử dụng hội đồng, có nghĩa là bạn tránh các tình huống như vì không thêm dữ liệu cần thiết vào hệ thống đăng ký, v.v. thường là vấn đề khi phát triển với các nền tảng khác.

Điều này có nghĩa là việc triển khai các ứng dụng thường đơn giản như sao chép các tệp vào một thư mục trên máy tính từ xa . Bởi vì không có thông tin bổ sung nào được yêu cầu trên các hệ thống đích, bạn chỉ có thể chạy một tệp thi hành từ thư mục này và (giả sử .NET CLR được cài đặt) bạn nên sử dụng.

Tất nhiên, bạn sẽ không nhất thiết muốn bao gồm mọi thứ cần thiết để chạy một ứng dụng ở một nơi. Bạn có thể viết một số mã thực hiện các tác vụ theo yêu cầu của nhiều ứng dụng. Trong các tình huống như vậy, thường hữu ích khi đặt mã có thể sử dụng lại ở một nơi có thể truy cập được đối với tất cả các ứng dụng. Trong .NET Framework, đây là Global Cache (GAC). Việc đặt mã trong GAC rất đơn giản - bạn chỉ cần đặt assembly có chứa mã trong thư mục chứa bộ nhớ cache này.

+0

Để rõ ràng hơn "Khi bạn biên dịch một ứng dụng, mã MSIL được tạo sẽ được lưu trong một assembly". Chỉ cần thêm để xem nội dung của một assembly, bạn có thể sử dụng ILSPY. – Sandeep

7

bộ sưu tập vật lý của Lớp, giao diện, enum v.v ... trong mã IL. Có thể là tệp .EXE hoặc .DLL .EXE là tệp thi hành và .DLL có thể được sử dụng động trong bất kỳ ngôn ngữ nào được hỗ trợ .net.

209

Hội là đơn vị triển khai ứng dụng .net nhỏ nhất. Có thể là dll hoặc exe ​​.
Có hai loại chủ yếu với nó:

  1. Private hội: Các dll hoặc exe đó là tài sản duy nhất chỉ có một ứng dụng. Nó thường được lưu trữ trong thư mục gốc ứng dụng

  2. lắp ráp công cộng/chia sẻ: Nó là một dll mà có thể được sử dụng bởi nhiều ứng dụng cùng một lúc. Bản chia sẻ được chia sẻ được lưu trữ trong GAC tức là Global Assembly Cache.

Khó nghe? Naa ....
GAC chỉ đơn giản là C: \ Windows \ Assembly thư mục nơi bạn có thể tìm thấy các hội đồng công cộng/dll của tất cả các phần mềm được cài đặt trong PC của bạn.

Ngoài ra còn có loại lắp ráp thứ ba và ít được biết đến nhất: Satellite Assembly.
Hội nghị truyền hình vệ tinh chỉ chứa các đối tượng tĩnh như hình ảnh và các tệp không thể thực thi khác mà ứng dụng yêu cầu.

Hy vọng điều này sẽ giúp người đọc!

+2

Lưu ý rằng vị trí khác với .NET 4.0: http://stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why – TrueWill

+0

có thể bị chậm. sau khi một thư mục được một nghìn trong số đó, cửa sổ sẽ chậm hơn khi cố gắng đi bộ cây thư mục hoặc chỉ đọc thư mục. –

+0

@mangeshkt - Có thể sao chép dll của một ứng dụng và đặt nó vào thư mục gốc của một ứng dụng khác, tôi có thể sử dụng chức năng của thư mục đầu tiên không? – Shivam657

1

Hội là phần cơ bản của lập trình với .NET Framework. Nó chứa mã CLR thực thi mã MSIL (Microsoft Intermediate Language) trong một tệp thực thi di động sẽ không được thực hiện nếu nó không có tệp kê khai lắp ráp được liên kết.

27

Lắp ráp là tệp .dll thực tế trên ổ cứng của bạn, nơi các lớp trong Khuôn khổ .NET được lưu trữ. Ví dụ, tất cả các lớp chứa trong ASP.NET Framework được đặt trong một assembly có tên System.Web.dll.

Chính xác hơn, lắp ráp là đơn vị chính của việc triển khai, bảo mật và điều khiển phiên bản trong Khuôn khổ .NET. Bởi vì một assembly có thể mở rộng nhiều file, một assembly thường được gọi là dll "logic".

Lưu ý

.NET Framework (phiên bản 2.0) bao gồm 51 cụm.

Có hai loại cụm: riêng tư và được chia sẻ. Một hội đồng tư nhân có thể được sử dụng bởi chỉ một ứng dụng duy nhất. Mặt khác, một assembly có thể được sử dụng bởi tất cả các ứng dụng nằm trên cùng một máy chủ.

Hội đồng chia sẻ được đặt trong Bộ nhớ đệm toàn cầu (GAC). Ví dụ, assembly System.Web.dll và tất cả các assembly khác đi kèm với .NET Framework đều nằm trong Cache Assembly toàn cục.

Lưu ý

Bộ nhớ lắp ráp toàn cầu nằm trong thư mục \ WINDOWS \ Assembly của máy tính. Có một bản sao riêng của mỗi assembly trong thư mục \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 của bạn. Tập hợp đầu tiên của hội đồng được sử dụng trong thời gian chạy và tập thứ hai được sử dụng tại thời gian biên dịch.

Trước khi bạn có thể sử dụng một lớp có trong một assembly trong ứng dụng của bạn, bạn phải thêm một tham chiếu đến assembly. Theo mặc định, một ứng dụng ASP.NET tham chiếu các hội phổ biến nhất chứa trong Global Assembly Cache:

mscorlib.dll

System.dll

System.Configuration.dll

System.Web .dll

System.Data.dll

System.Web.Services.dll

System.Xml.dll

System.Drawing.dll

System.EnterpriseServices.dll

System.Web.Mobile.dll

Để sử dụng bất kỳ lớp học đặc biệt trong .NET Framework, bạn phải làm hai việc. Đầu tiên, ứng dụng của bạn phải tham chiếu đến assembly chứa class đó. Thứ hai, ứng dụng của bạn phải nhập không gian tên được liên kết với lớp đó.

Trong hầu hết các trường hợp, bạn sẽ không phải lo lắng về việc tham khảo hội đồng cần thiết vì các hội đồng phổ biến nhất được tham chiếu tự động. Tuy nhiên, nếu bạn cần sử dụng một assembly chuyên dụng, bạn cần thêm một tham chiếu một cách rõ ràng vào assembly. Ví dụ, nếu bạn cần tương tác với Active Directory bằng cách sử dụng các lớp trong không gian tên System.DirectoryServices thì bạn sẽ cần thêm một tham chiếu đến assembly System.DirectoryServices.dll vào ứng dụng của bạn.

Mỗi mục nhập lớp trong tài liệu .NET Framework SDK liệt kê vùng lắp ráp và không gian tên được kết hợp với lớp. Ví dụ, nếu bạn tra cứu lớp MessageQueue trong tài liệu, bạn sẽ khám phá ra rằng lớp này nằm trong không gian tên System.Messaging nằm trong assembly System.Messaging.dll.

Nếu bạn đang sử dụng Visual Web Developer, bạn có thể thêm tham chiếu vào assembly một cách rõ ràng bằng cách chọn tùy chọn menu Website, Thêm tham chiếu và chọn tên của assembly mà bạn cần tham khảo. Ví dụ, thêm một tham chiếu đến hội nghị System.Messaging.dll kết quả trong tệp cấu hình web trong Liệt kê 1.4 được thêm vào ứng dụng của bạn.

Ví dụ: Web.config

enter code here 

Nếu bạn không muốn sử dụng Visual Web Developer, sau đó bạn có thể thêm các tham chiếu đến assembly System.Messaging.dll bằng cách tạo ra các tập tin trong ví dụ trên bằng tay

+1

Giải thích thực sự tuyệt vời .... –

+1

Nhiều công nghệ hơn là câu trả lời được chấp nhận, đây phải là câu trả lời được chấp nhận. – sparkyShorts

2

Trong. net, một lắp ráp thể là:

một bộ sưu tập của nhiều quản lý phần chứa Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Files được biên dịch Privately hoặc Publicly; được triển khai vào một thư mục local hoặc Shared (GAC); discover-able bằng cách khác programs/assemblies và; có thể là phiên bản-ed.

1

Các ứng dụng .NET được tạo bằng cách ghép nối với nhau bất kỳ số lượng hội đồng nào. Nói một cách đơn giản, một assembly không có gì khác hơn là một binary, self-descriptioning binary (DLL hoặc EXE) chứa một số sưu tập các kiểu (các lớp, các giao diện, cấu trúc, vv) và các tài nguyên tùy chọn (hình ảnh, bảng chuỗi và không biết). Một điều cần lưu ý là ngay bây giờ, tổ chức nội bộ của một assembly .NET không giống như tổ chức nội bộ của một máy chủ COM cổ điển (bất kể các phần mở rộng tập tin được chia sẻ).

6

Lắp ráp là đơn vị thời gian chạy bao gồm các loại và các tài nguyên khác. Tất cả các loại trong một hội đồng có cùng số phiên bản.

Thông thường, một assembly chỉ có một vùng tên và được sử dụng bởi một chương trình. Nhưng nó có thể mở rộng trên một số không gian tên. Ngoài ra, một không gian tên có thể lây lan qua một số hội đồng. Trong các thiết kế lớn, một hội đồng có thể bao gồm nhiều tệp được tổ chức cùng nhau bằng một tệp kê khai (tức là một bảng nội dung).

Trong C#, một hội đồng là việc triển khai nhỏ nhất của một Net application.It có thể là một dll hoặc một exe.It có hai loại: 1. Private hội 2. cộng/Shared hội

1

Trong .NET , khi chúng tôi biên dịch mã nguồn của chúng tôi sau đó lắp ráp được tạo ra trong Visual Studio. Hội bao gồm hai phần Manifest và IL (Intermediate Language).Tệp kê khai chứa siêu dữ liệu lắp ráp có nghĩa là yêu cầu phiên bản của phiên bản, nhận dạng bảo mật, tên và băm của tất cả các tệp tạo nên hội đồng. IL chứa thông tin về các lớp học, nhà thầu, phương pháp chính, v.v.

3

Ngoài các câu trả lời được chấp nhận, tôi muốn cung cấp cho bạn một ví dụ !

Ví dụ, tất cả chúng ta sử dụng

System.Console.WriteLine() 

Nhưng đâu là mã cho System.Console.WriteLine !?
mã nào thực sự đặt văn bản trên bảng điều khiển?

Nếu bạn nhìn vào trang đầu tiên của documentation for the Console class, bạn sẽ thấy gần đầu những điều sau đây: Assembly: mscorlib (in mscorlib.dll) Điều này chỉ ra rằng mã cho lớp Console nằm trong một assem- bly tên mscorlib. Một hội đồng có thể bao gồm nhiều tệp, nhưng trong trường hợp này, nó chỉ là một tệp, đó là thư viện liên kết động mscorlib.dll.

Tệp mscorlib.dll là rất quan trọng trong .NET, Đây là tệp DLL chính cho các thư viện lớp trong .NET và nó chứa tất cả các lớp và cấu trúc .NET cơ bản.

nếu bạn biết C hoặc C++, thông thường bạn cần một #include chỉ thị ở trên cùng tham chiếu tệp tiêu đề. Tệp bao gồm cung cấp các nguyên mẫu hàm cho trình biên dịch. về độ tương phản Trình biên dịch C# không cần các tệp tiêu đề. Trong quá trình biên dịch, trình biên dịch C# truy cập trực tiếp vào tệp mscorlib.dll và lấy thông tin từ siêu dữ liệu trong tệp đó liên quan đến tất cả các lớp và các kiểu khác được định nghĩa trong đó.

Trình biên dịch C# có thể thiết lập rằng mscorlib.dll thực sự chứa một lớp có tên là Console trong một không gian tên có tên System với phương thức có tên WriteLine chấp nhận một đối số kiểu chuỗi.

Trình biên dịch C# có thể xác định rằng cuộc gọi WriteLine là hợp lệ, và trình biên dịch thiết lập tham chiếu đến hội đồng mscorlib trong tệp thực thi.

theo mặc định Trình biên dịch C# sẽ truy cập mscorlib.dll, nhưng đối với các tệp DLL khác, bạn cần phải thông báo cho trình biên dịch biết về các lớp được đặt. Chúng được gọi là tài liệu tham khảo .

Tôi hy vọng điều đó đã rõ ràng ngay bây giờ!

Từ DotNetBookZero Charles pitzold

2

Như lắp ráp là đơn vị nhỏ nhất của versioning an ninh, triển khai và tái sử dụng mã trong Microsoft.Net.

Nó chứa:

- Assembly Identity 
- Manifest 
- Metadata 
- MSIL Code 
- Security Information 
- Assembly Header 
0

Visual Studio giải pháp bao gồm một hoặc nhiều dự án. Ví dụ: Các dự án bảng điều khiển có thể tạo ra một cụm . Một assembly là một đoạn mã hợp lý có thể được chuyển đến khách hàng, và thể chất là một .EXE (chương trình thực thi) hoặc .DLL (có thể được tái sử dụng bởi các chương trình khác).

0

Hội đồng là tập hợp các loại và tài nguyên tạo thành đơn vị chức năng hợp lý. Tất cả các loại trong Khuôn khổ .NET phải tồn tại trong các assembly; thời gian chạy ngôn ngữ chung không hỗ trợ các loại bên ngoài hội đồng. Mỗi lần bạn tạo một Ứng dụng Microsoft Windows®, Dịch vụ Windows, Thư viện Lớp hoặc ứng dụng khác với Visual Basic .NET, bạn đang xây dựng một assembly duy nhất. Mỗi hội đồng được lưu trữ dưới dạng tệp .exe hoặc .dll.

Nguồn: https://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

Đối với những người có nền Java như tôi hy vọng sau sơ đồ làm rõ khái niệm -

Assemblies cũng giống như tập tin jar (chứa nhiều file .class). Mã của bạn có thể tham chiếu đến một assembly hiện có hoặc bạn có thể được xuất bản như một assembly cho mã khác để tham chiếu và sử dụng (bạn có thể nghĩ đây là tệp jar trong Java mà bạn có thể thêm vào các phụ thuộc dự án của bạn).

Vào cuối ngày, một hội đồng là một mã được biên dịch có thể chạy trên bất kỳ hệ điều hành nào được cài đặt CLR. Điều này cũng giống như nói .class file hoặc jar kèm theo có thể chạy trên bất kỳ máy nào được cài đặt JVM.

enter image description here

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