Assembly part 2

Chia sẻ: Dqdsadasd Qwdasdsad | Ngày: | Loại File: PDF | Số trang:8

0
72
lượt xem
18
download

Assembly part 2

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Cấu trúc Assembly Một assembly thường bao gồm nhiều thành phần như: • Một Assembly metadata mô tả trọn vẹn assembly • Một Type Metadata mô tả các kiểu dữ liệu và các phương thức • Một MSIL code là đoạn mã viết theo ngôn ngữ trung gian • Các Resources

Chủ đề:
Lưu

Nội dung Text: Assembly part 2

  1. Cấu trúc Assembly Một assembly thường bao gồm nhiều thành phần như: • Một Assembly metadata mô tả trọn vẹn assembly • Một Type Metadata mô tả các kiểu dữ liệu và các phương thức • Một MSIL code là đoạn mã viết theo ngôn ngữ trung gian • Các Resources là những tài nguyên như hình ảnh, chuỗi . . . Được thể hiện như hình dưới đây : Hình trên đây chỉ gồm một file component.dll duy nhất, tất cả nằm trọn trong một tâp tin. Tuy nhiên một assembly cũng có thể trải dài trên nhiều tập tin mà ta gọi là multifile assembly Ở hình dưới đây assembly được trải dài trên ba tập tin và ba tập tin kể trên hình thành một assembly duy nhất.
  2. Metadata là gì ? Metadata là thông tin được lưu trữ trên assembly mô tả những kiểu dữ liệu và những phương thức thuộc assembly cung cấp những tin tức hữu ích khác liên quan đến assembly . Chính nhờ metadata nên các assembly thường được gọi là seft-describing (mô tả bản thân) vì nó mô tả một cách trọn vẹn mỗi module. Assembly Manifests Mỗi assembly đều có một mainfest được gắn liền còn được gọi là assembly metadata mô tả những gì được chứa trong assembly, bao gồm : • Tên nhận diện (identity name) • Một danh sách các tập tin thuộc assembly. Một assembly đơn lẻ phải có ít nhất một tập tin, nhưng có thể chứa số các tập tin. • Một danh sách các assembly được qui chiếu. tất cả các tập tin khác được dùng bởi assembly này bao gồm số phiên bản và các khoá dùng chung. Khoá dùng chung được sử dụng duy nhất để xác định assemblies. • Một bộ các yêu cầu cho phép (permission request) những quyền hạn cần có dể được phép chạy assembly này. • Một danh sách các kiểu dữ liệu và nguồn lực trong assembly, một bản đồ nối liền các kiểu dữ liệu public với các đoạn mã thi công. Private and Shared Assemblies Assemblies nằm ở hai dạng: private assembly và shared assembly. Dạng thứ nhất private assembly là một tập hợp (collection) những kiểu dữ liệu chỉ dành riêng cho một ứng dụng sử dụng. Dạng thứ hai shared assembly thì lại được chia sẽ sử dụng bởi nhiều ứng dụng. Viewing Assemblies
  3. Assemblies có thể được hiển thị khi sử dụng tiện ích command-line ildasm dưới hỗ trợ của MSIL . Một assembly được mở khi bắt đầu ildasm từ command_line với đối số assembly hoặc chọn lựa từ File | open menu hình sau sẽ miêu tả một ildasm khi chúng ta xây dựng HelloCSharp.exe. ildasm hiển thị the manifest, và HelloCSharp type trong Wrox.ProCSharp.Assemblies.CrossLanguage namespace. Chúng ta có thể thấy the version number, và thuộc tính assembly ngay khi mở assemblies và versions của chúng. Mở phương thức của lớp , chúng ta có thể thấy đuợc đoạn mã MSIL ildasm Symbols Các kí hiệu được sử dụng với ildasm trình bày dưới đây: Symbol Description Biểu diễn một namespace. Biểu diễn một kiểu tham chiếu một lớp.Tương tự các ký hiệu được sử dụng bởi các kiểu giá trị, nó có màu sáng Biểu diễn một phương thức nhận và thiết lập các accessors của một thuộc tính; "S" trong đồ hoạ có nghĩa là phương thức tĩnh Biểu diễn một trường Biểu diễn một sự kiện Biểu diễn một thuộc tính Có nghĩa là có nhiều thông tin có giá trị như thông tin manifest hoặc thông tin về miêu tả một lớp
  4. Xây dựng (Building Assemblies) Chúng ta vừa biết được assembly tiếp theo chúng ta biết cách để xây dụng chúng. chúng ta sẽ xây dựng xuyên suốt bời vì .NET có khả năng thi hành assembly phức tạp.nhưng chúng ta hãy xem trường hợp cụ thể cho assemblies. Tạo các Modules và Assemblies Tất cả dự án (project) C# trong Visual Studio .NET đều tạo một assembly. Cho dù bạn chọn một kiểu dự án DLL hoặc EXE , một assembly luôn được tạo. Với trình biên dịch command-line C# csc, Nó cũng có khả năng tạo modules. Một module là một DLL assembly không thuộc tính (nên nó không có assembly, nhưng nó được thêm vào một assemblies lúc sau). Dòng lệnh như sau: csc /target:module hello.cs Tạo một module hello.netmodule. Nó có thể nhìn thấy module này khi sử dụng ildasm. Một module cũng có một manifest, Nhưng chúng không có phần .assembly bên trong the manifest (ngoại trừ assemblies nội , Chúng được kham khảo), Vì một module không có assembly thuộc tính. Nó không thể được cấu hình versions hoặc chấp nhận với modules; Chúng chỉ có thể tại assembly gốc. Trong manifest của module, kham khảo đến assemblies có thể được tìm thấy. Để so sánh modules của assemblies, Ta tạo một lớp A và biên dịch nó: csc /target:module A.cs Biên dịch tạo ra một file A.netmodule, Nó không có thông tin của assembly (như chúng ta thấy khi sử dụng ildasm nhìn thấy ở manifest). The manifest của module miêu tả kham khảo assembly mscorlib và the .module entry: Tiếp theo ,Ta tạo một assembly B nó bao gồm module A.netmodule. Nó không cần thiết source file để sinh ra assembly này. Dòng lệnh sinh assembly là:
  5. csc /target:library /addmodule:A.netmodule /out:B.dll Khi nhìn vào assembly sử dụng ildasm, chỉ có một manifest có thể thấy. Trong manifest, assembly mscorlib là kham khảo .Tiếp theo chúng ta thấy assembly section với một thuật toán (algorithm) và version. số lượng algorithm phụ thuộc loại algorithm được sử dụng để tạo ra code của assembly. Khi tạo một assembly lập trình đi vào chọn lựa algorithm. Phần của manifest là một danh sách tất cả modules đang thuộc assembly. Ta thấy .module A.netmodule phụ thuộc assembly. Các lớp xuất ra ngoài từ các modules là phần assembly manifest; Mục đích của modules là cái gì? Modules có thể giúp khởi động nhanh hơn assemblies bởi vì không phải tất cả ở trong một file đơn lẻ. modules chỉ kích hoạt khi cần. Một lí do khác của modules là nếu bạn muốn tạo 1 assembly với nhiều hơn 1 ngôn ngữ lập trình; một module có thể được viết sử dụng VB.NET, module khác sử dụng C#,và cả hai modules có thể được chứa trong 1 assembly đơn lẻ. Tạo Assemblies sử dụng Visual Studio .NET Như vừa đề cập tất cả loại dự án (project types) trong Visual Studio .NET tạo assemblies. Với Visual Studio .NET 7.0 chúng không hổ trợ để tạo thư mục modules. Khi tạo một Visual Studio .NET project, Nguồn file AssemblyInfo.cs được sinh ra một cách tự động. Chúng ta sử dụng sourcecode bình thường soạn thảo để cấu hình assembly thuộc tính file này. Đây là file được sinh ra từ wizard: using System.Reflection; using System.Runtime.CompilerServices; //
  6. // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the // information associated with an assembly. // [assembly: AssemblyTitle("")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four // values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build // Numbers by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] // // In order to sign your assembly you must specify a key to use. Refer to // the Microsoft .NET Framework documentation for more information on // assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified - the assembly cannot be signed. // (*) KeyName refers to a key that has been installed in the Crypto // Service Provider (CSP) on your machine. // (*) If the key file and a key name attributes are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP - that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the
  7. // key in the file is installed into the CSP and used. // (*) Delay Signing is an advanced option - see the Microsoft .NET // Framework documentation for more information on this. // [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("")] Sau đâu là danh sách tất cả assembly thuộc tính tương đương với các lớp trong System.Reflection namespace. Assembly Attribute Description AssemblyCompany Tên công ty AssemblyConfiguration Thông tin xây dựng, hay thông tin debug AssemblyCopyright and Thông tin bản quyền và nhà sản xuất AssemblyTrademark AssemblyDefaultAlias Thuộc tính một bí danh được xác định AssemblyDescription Miêu tả assembly hoặc sản phẩm. Xem ở thuộc tính của file thi hành. AssemblyProduct Tên của sản phẩm nơi assembly phụ thuộc . AssemblyInformationalVersion Thuộc tính này không dùng cho kiểm tra fiên bản khi assemblies được kham khảo, nó chỉ cung cấp thông tin Xác định phiên bản của một chương trình ứng dụng. AssemblyTitle Sử dụng để cho một tên thân thiện, bao gồm cả khoảng trắng. Ví dụ các thuộc tính đã được cấu hình : [assembly: AssemblyTitle("Professional C#")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("Retail version")] [assembly: AssemblyCompany("Wrox Press")] [assembly: AssemblyProduct("Wrox Professional Series")] [assembly: AssemblyCopyright("Copyright (C) Wrox Press 2002")] [assembly: AssemblyTrademark("Wrox is a registered trademark of Wrox Press Ltd")] [assembly: AssemblyCulture("en-US")] Thuộc tính tương đương với các lớp trong namespace System.Reflection :
  8. • AssemblyCulture nói về văn hoá của assembly. Chúng ta sẽ nói về nền văn hoá theo từng địa phương. • AssemblyDelaySign, AssemblyKeyFile, and AssemblyKeyName được sử dụng để tạo strong names cho shared assemblies. • AssemblyVersion đặc tả số phiên bản của assembly. Phiên bản rất quan trong khi sử dụng assemblies chia sẽ.
Đồng bộ tài khoản