Danh mục tài liệu

C# và kiến trúc .NET part 4

Số trang: 3      Loại file: pdf      Dung lượng: 142.21 KB      Lượt xem: 22      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Assemblies Một assembly là một đơn vị luận lí chứa mã đã được biên dịch sang .NET. Chúng ta sẽ bàn kĩ về các assemblie trong chương 8, ở đây chúng ta sẽ nói sơ về nó. Một assembly là một tự mô tả đầy đủ, và nó giống một đơn vị luận lí hơn là một đơn vị vật lí,
Nội dung trích xuất từ tài liệu:
C# và kiến trúc .NET part 4AssembliesMột assembly là một đơn vị luận lí chứa mã đã được biên dịch sang .NET. Chúng ta sẽbàn kĩ về các assemblie trong chương 8, ở đây chúng ta sẽ nói sơ về nó.Một assembly là một tự mô tả đầy đủ, và nó giống một đơn vị luận lí hơn là một đơn vịvật lí, điều đó có nghĩa là nó có thể chứa trong nhiều file (thật vậy các assemblie độngđược lưu trong bộ nhớ không phải trong file). Nếu một assembly được lưu trong nhiềufile, thì sẽ có một file chính chứa các con trỏ và các mô tả về các file khác của assembly.Chú ý rằng, câu trúc assembly được dùng chung cho cả mã thi hành và mã thư viện. Sựkhác biệt duy nhất là assembly thi hành chứa lối vào chương trình chính trong khiassembly thư viện thì không có.Một điểm quan trọng trong các assembly là chúng chứa metadata dùng để mô tả các kiểuvà phương thức được định nghĩa trong mã tương ứng. Một assembly, tất nhiên cũng chứassembly metadata dùng để mô tả chính assembly đó. Assembly metadata này, chứa mộtvùng đựơc hiểu như là manifest, cho phép kiểm tra phiên bản và tình trạng của assembly.ildasm, một tiện ích có sẵn của Windows, có thể dùng để nghiên cứu nội dung của mộtassembly, bao gồm manifest metadata. Chúng ta sẽ lấy vi dụ về ildasm trong chương 8.Thật vậy một assembly chứa metadata của chương trình nghĩa là các ứng dụng hoặc cácassembly khác có thể gọi mã trong môt assembly mà không cần tham chiếu đến Registry,hoặc một dữ liệu nguồn khác,. Một điểm quan trọng trong cách làm của COM cũ, cácGUID của các thành phần và giao diện interfaces không thể đạt được từ Registry.Việc dàn trải dự liệu thành 3 định vị khác nhau đồng nghĩa với việc tạo ra mối nguy hiểmtrong đồng bộ hoá, nó ngăn không cho các thành phần khác sử dụng. Với assemblies, sẽkhông còn những mối nguy hiểm như vậy, bởi vì tất các các metadata được lưu trong bộlệnh thi hành của chương trình. Chú ý rằng dù cho các assemblie được lưu thành một vàifile, chúng vẫn không gây vấn đề gì về đồng bộ hoá dữ liệu. Đó là vì nhờ vào fileassembly chính, file này chứa đường dẫn, các thông tin chi tiết, mã băm, và nội dung củacác file khác, điều đó có nghĩa là nếu một file bị thay thế, hay bị phá hoại, nó sẽ được tìmra và sẽ không cho load.Assemblies bao gồm 2 loại: các shared và private assembly.Private AssembliesPrivate assemblies là kiểu đơn giản nhất. Nó chứa phần mềm và chỉ được dùng cho phầnmềm đó. Với phần mô tả này bạn có thể chứa đựng các private assemblie hòng cung cấpcho một ứng dụng kiểu thực thi và một số thư viện, các thư viện này chứa mã sẽ được thihành bởi ứng dụng đó.Hệ thống đảm bảo rằng private assemblies sẽ không được dùng bởi phần mềm khác, bởivì một ứng dụng chỉ có thể load private assemblies trong cùng folder với chương trìnhchính hoặc là trong một thư mục con của nó.Chúng ta không thể tin cậy rằng tất cả các phần mềm luôn được cài đặt trong thư mục củanó, nghĩa là sẽ không bao giờ có chuyện một gói phần mềm ghi đè, sửa chữa hoặc vô tìnhload một private assemblies dành riền cho một gói khác. Vậy làm sao để các Privateassemblie chỉ được dùng bởi gói phần mềm mà nó mô tả? Cần có một cơ chế bảo vệ, saocho khi một sản phẩm thương mại khác cài đè lên một phiên bản assembly mới (chưa kểđến các chương trình đựơc thiết kế để phá hoại), thì sẽ không có chuyện tranh chấp tên.Nếu có sự trùng tên trong các assembly, đều đó không quan trọng và các ứng dụng chỉ cóthể nhìn thấy một bộ các assembly.Bởi vì một private assembly là một tự định nghĩa trọn vẹn, tiến trình xử lí cực kì đơngiản. Bạn đơn giản thay thế các file thích hợp vào thư mục thíhc hợp trong file hệ thống(Không cần phải đăng kí trong registry). Tiến trình này được gọi là zero impact (xcopy)installation.Shared AssembliesShared assemblies được dành cho cácc thư viện công cộng có thể dùng cho bất kì ứngdụng nào. Bởi vì bất kì ứng dụng nào cũng có thể truy xuất một shared assembly, cầnphải có các cơ chế để bảo vệ các rủi ro sau: • Tranh chấp tên, khi một công ty tạo ra các shared assembly trùng tên với các shared assembly sẵn có của bạn. Về mặt lí thuyết mã của bạn có thể truy xuất vào cả hai assembly này song đây có thể là một vấn đề phức tạp. • Lỗi của một assembly có thể bị ghi đè bởi một phiên bản khác của cùng same assembly - một phiên bản mới không tương thích với những gì sẵn có.Giải pháp cho những vấn đề trên là đặt các shared assembly trong một cây thư mục đặtbiệt của hệ thống, có thể xem như là assembly cache toàn cục. Không giống như cácprivate assembly, nó không đơn giản là copy assembly sang một thư mục thích hợp - nócần được cài đặt rõ ràng vào cache. Tiến trình này có thể được thực thi bởi một số tiệních của .NET, bao gồm luôn quá trình kiểm tra trên assembly, tương tự như cài đặt mộtthư mục trong assembly cache để đảm bảo tính toàn vẹn của assembly.Để tránh tranh chấp tên, shared assemblies đưa ra một được quản lí dựa trên một khóamật mã chính. Tên này được gọi là st ...