.NET Assemblies là gì?


193

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


11
Hãy đọc CLR qua C # . 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.
David Neale

Câu trả lời:


169

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


30
@KimJongWoo - Không, một tệp Jar chỉ là một tệp zip chứa các tệp mã byte được biên dịch. Một tập hợp là một tệp PE (định dạng thực thi di động) (tức là 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ự.
Erik Funkenbusch

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

245

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

  1. Hội đồng riêng: dll hoặc exe vốn là tài sản duy nhất của một ứng dụng. Nó thường được lưu trữ trong thư mục gốc của ứng dụng

  2. Lắp ráp công khai / dùng chung: Đây là một dll có thể được sử dụng bởi nhiều ứng dụng cùng một lúc. Một hội đồng chia sẻ được lưu trữ trong GAC tức là Global hội Cache .

Nghe có vẻ khó? Naa ....
GAC chỉ đơn giản là thư mục C: \ Windows \ hội nơi bạn có thể tìm thấy các cụm / dll công khai 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ó một loại lắp ráp thứ ba và ít được biết đến nhất: Lắp ráp vệ tinh .
Một hội 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 độc giả!


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

Điều đó có thể bị chậm. sau khi một thư mục nhận được một nghìn trong số đó, các 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.
Jim Michaels

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

57

Lắp ráp

Khi bạn biên dịch một ứng dụng, mã MSIL được tạo sẽ được lưu trữ trong một cụm. Các hội đồng bao gồm cả các tệp ứng dụng có thể thực thi 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 (những chương trình này có phần mở rộng tệp .exe) và các thư viện (có phần mở rộng dll) để các ứng dụng khác sử dụng.

Ngoài việc chứa MSIL, các hội đồng cũng bao gồm thông tin meta (nghĩa là thông tin về thông tin có trong tập hợp, còn được gọi là siêu dữ liệu) và các tài nguyên tùy chọn (dữ liệu bổ sung được sử dụng bởi MSIL, như tệp âm thanh và hình ảnh). Thông tin meta cho phép các hội đồng hoàn toàn tự mô tả. Bạn không cần thông tin nào khác để sử dụng một hội đồng, nghĩa là bạn tránh các tình huống như không thêm dữ liệu cần thiết vào sổ đăng ký hệ thống, v.v., điều này thường là một 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. 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 thực thi từ thư mục này và (giả sử .NET CLR đã được cài đặt) bạn nên đi.

Tất nhiên, bạn không nhất thiết muốn bao gồm mọi thứ cần thiết để chạy ứ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 cho tất cả các ứng dụng. Trong .NET Framework, đây là Bộ đệm ẩn hội đồng toàn cầu (GAC). Việc đặt mã trong GAC rất đơn giản - bạn chỉ cần đặt cụm chứa mã trong thư mục chứa bộ đệm này.


Để 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 trữ trong một cụm". Chỉ cần thêm để xem nội dung của một hội đồng, bạn có thể sử dụng ILSPY.
Sandeep

33

Một tập hợp là tập tin thực tế trên ổ cứng của bạn, nơi các lớp trong .NET Framework được lưu trữ. Ví dụ, tất cả các lớp có trong ASP.NET Framework được đặt trong một hội đồng có tên System.Web.dll.

Chính xác hơn, một hội đồng là đơn vị chính của triển khai, bảo mật và kiểm soát phiên bản trong .NET Framework. Bởi vì một tập hợp có thể trải rộng trên nhiều tập tin, một tập hợp thường được gọi là dll "logic".

Ghi chú

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

Có hai loại hội đồng: riêng tư và chia sẻ. Một lắp ráp riêng chỉ có thể được sử dụng bởi một ứng dụng duy nhất. Mặt khác, một tập hợp được chia sẻ 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ủ.

Các hội đồng được chia sẻ được đặt trong Bộ đệm ẩn hội đồng toàn cầu (GAC). Ví dụ: hội đồng System.Web.dll và tất cả các hội đồng khác có trong .NET Framework được đặt trong Bộ đệm ẩn hội đồng toàn cầu.

Ghi chú

Bộ đệm ẩn hội đồng toàn cầu được đặt vật lý trong thư mục \ WINDOWS \ hội của máy tính của bạn. Có một bản sao riêng của mỗi hội đồng trong thư mục \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 của bạn. Tập hợp đầu tiên được sử dụng trong thời gian chạy và tập hợ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 cụm trong ứng dụng của mình, bạn phải thêm một tham chiếu đến cụm. Theo mặc định, một ứng dụng ASP.NET tham chiếu các tập hợp phổ biến nhất có trong Bộ đệm ẩn hội đồng toàn cầu:

mscorlib.dll

System.dll

System.Configuration.dll

System.Web.dll

System.Data.dll

System.Web.Service.dll

System.Xml.dll

System.Drawing.dll

Hệ thống. EntrypriseService.dll

System.Web.Mobile.dll

Để sử dụng bất kỳ lớp cụ thể nào trong .NET Framework, bạn phải thực hiện hai điều. Đầu tiên, ứng dụng của bạn phải tham chiếu cụm có chứa lớp. 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 lo lắng về việc tham chiếu lắp ráp cần thiết bởi 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 hội đồng chuyên ngành, bạn cần thêm một tham chiếu rõ ràng vào hội đồng. 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.DirectoryService thì bạn sẽ cần thêm một tham chiếu đến cụm System.DirectoryService.dll vào ứng dụng của mình.

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

Nếu bạn đang sử dụng Visual Web Developer, bạn có thể thêm một tham chiếu đến một cụm một cách rõ ràng bằng cách chọn tùy chọn menu Trang web, Thêm tham chiếu và chọn tên của cụm mà bạn cần tham chiếu. Ví dụ, việc thêm một tham chiếu đến kết quả lắp ráp System.Messaging.dll 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, thì bạn có thể thêm tham chiếu vào cụm System.Messaging.dll bằng cách tạo tệp trong ví dụ trên bằng tay


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

8

Wikipedia phải nói:

Trong Microsoft .NET framework, một assembly là một thư viện mã được biên dịch một phần để sử dụng cho việc triển khai, tạo phiên bản và bảo mật. Có hai loại: tập hợp quy trình (EXE) và tập hợp thư viện (DLL). Một tập hợp quy trình đại diện cho một quy trình sẽ sử dụng các lớp được định nghĩa trong các tập hợp thư viện. Các tập hợp .NET chứa mã trong CIL, thường được tạo từ ngôn ngữ CLI, sau đó được biên dịch thành ngôn ngữ máy khi chạy bởi trình biên dịch chỉ trong thời gian CLR. Một tập hợp có thể bao gồm một hoặc nhiều tập tin. Các tập tin mã được gọi là mô-đun. Một tập hợp 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 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 tổ hợp.

Nếu bạn thực sự đã duyệt nó sẽ có ích nếu bạn làm rõ những gì bạn không hiểu


7

Xem cái này :

Trong Microsoft .NET framework, một assembly là một thư viện mã được biên dịch một phần để sử dụng cho việc triển khai, tạo phiên bản và bảo mật


7

bộ sưu tập vật lý của Class, giao diện, enum, vv trong mã IL. Đó có thể là tệp .EXE hoặc .DLL .EXE là tệp thực thi và .DLL có thể được sử dụng động trong mọi ngôn ngữ được hỗ trợ .net.


6

Một hội đồng là một đơ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 hội đồng chỉ có một không gian tên và được sử dụng bởi một chương trình. Nhưng nó có thể trải dài trên một số không gian tên. Ngoài ra, một không gian tên có thể trải rộng trên 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ởi một bảng kê khai (tức là một bảng mục lục).

Trong C #, một hội đồng là triển khai nhỏ nhất của ứng dụng .Net. Nó có thể là một dll hoặc exe. Nó có hai loại: 1. Hội riêng tư 2. Hội đồng chung / chung


6

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

Ví dụ, tất cả chúng ta đều 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àn điều khiển?

Nếu bạn nhìn vào trang đầu tiên của tài liệu cho lớp Console , bạn sẽ thấy ở gần đầu trang sau: Hội: mscorlib (trong mscorlib.dll) Điều này cho biết rằng mã cho lớp Console nằm ở vị trí lắp ráp tên là mscorlib. Một tập hợp có thể bao gồm nhiều tệp, nhưng trong trường hợp này chỉ có một tệp, đó là thư viện liên kết động mscorlib.dll.

Tệp mscorlib.dll rất quan trọng trong .NET, Đây là 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 lệnh #incoide ở đầu 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. trên độ tương phản Trình biên dịch C # không cần 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 loại 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ự có chứa một lớp có tên Console trong một không gian tên có tên System với một phương thức có tên WriteLine chấp nhận một đối số của chuỗi kiểu.

Trình biên dịch C # có thể xác định rằng lệnh gọi WriteLine là hợp lệ và trình biên dịch sẽ thiết lập một tham chiếu đến cụm 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 DLL khác, bạn sẽ cần báo cho trình biên dịch tập hợp trong đó các lớp được đặt. Chúng được gọi là tài liệu tham khảo.

Tôi hy vọng rằng nó rõ ràng bây giờ!

Từ DotNetBookZero Charles pitzold


5

MSDN có một lời giải thích tốt :

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


4

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

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

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

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

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 tệp. Class hoặc jar được đóng gói có thể chạy trên bất kỳ máy nào có cài đặt JVM.

nhập mô tả hình ảnh ở đây


2

Trong .Net, một hội đồng có thể là:

Một bộ sưu tập khác nhau quản lý phần có chứa Types (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config Filesbiên soạn Privatelyhoặc Publicly; triển khai vào một localhoặc Shared (GAC)thư mục; discover-ablebởi khác programs/assembliesvà; có thể là phiên bản-ed.


2

Vì lắp ráp là đơn vị bảo mật phiên bản nhỏ nhất, 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

1

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


1

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


1

Trong .NET, khi chúng tôi biên dịch mã nguồn thì lắp ráp sẽ được tạo trong Visual Studio. Hội bao gồm hai phần Manifest và IL (Ngôn ngữ trung gian). Manifest chứa siêu dữ liệu lắp ráp có nghĩa là các yêu cầu phiên bản của lắp ráp, 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 lắp ráp. IL chứa thông tin về các lớp, hàm tạo, phương thức chính, v.v.



1

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.