ก่อนอื่นขออนุญาติออกตัวก่อนน่ะครับ ช่วงนี้ที่ทำงานผมเริ่มกลับมามีงานแล้วครับ จากที่ สองสามเดือนก่อนหน้าไม่ค่อยมีงาน ตอนนี้เลยไม่ค่อยมีเวลาว่าง อาจจะออกบทความช้าหน่อยน่ะครับ
ใน header ของ metadata ตอนแรกผมตั้งใจจะเขียน definition table จากนั้นจะเขียนเรื่อง reference table แล้วค่อยเขียนเรื่อง manifest table หลังจากที่เริ่มเขียน reference table กลายเป็นว่ามันเกี่ยวเนื่องกันกับ manifest table คือต้องมีความเข้าใจในเรื่อง manifest table ก่อน จึงจะเข้าใจว่าอะไรคือ reference table ดังนั้นบทความนี้ผมจะอธิบาย manifest table น่ะครับ
โดยปกติโปรแกรมที่เราเขียนจึ้นมาทั้งหมดสามารถ execute ได้เพราะว่า มี manifest table และทำให้ execute file กลายเป็น Assembly module ขณะทำ runtime โดยทุกๆ code ที่ถูก compile ด้วย Visual Studio จะถูก compiler สร้าง manifest ไว้ที่ execute table ทุกครั้ง หมายความว่า code ที่ถูก compile ด้วย Visual Studio จะเป็น Assembly module เสมอ
ทุกๆ Assembly module ไม่ว่าจะเป็น static หรือ dynamic จะทำหน้าที่เก็บข้อมูลของ file ต่างๆ ที่ assembly เรียกใช้รวมถึงอธิบายวิธีการใช้ข้อมูลนั้น ข้อมูลของ file ในทีนี้สามารถเป็นได้ในรูปแบบของรูปภาพ (jpg หรือ gif), file library ที่มีนามสุล DLL และถูกเรียกใช้โดย module นอกจากจะเก็บข้อมูลของ file แล้วยังเก็บข้อมูล ดังต่อไปนี้
Assembly name - ชื่อของ assembly เก็บข้อความเป็นตัวหนังสือ
Version number - version ของ assembly
Culture -ข้อมูลเกี่ยวกับภาษาที่ assembly รองรับ
Strong name - หัวข้อนี้จะกล่าวในบทความถัดไปครับ
Type reference - ข้อมูลเกี่ยวกับ Type ที่ Assembly มีการไป reference มาจาก module อื่น ข้อมูลส่วนนี้ จะเชื่อมไปยัง table ModuleRef และ TypeRef (อยู่ในกลุ่มของ reference table ซึ่งจะกล่าวในหัวข้อถัดถัดไป)
Information on reference assemblies - ข้อมูลเกี่ยวกับ Assembly อื่นที่ Assembly นี้มีการไป reference โดยข้อมูลส่วนนี้จะมีการเชื่อมไปยัง table AssemblyRef (อยู่ในกลุ่มของ reference table ซึ่งจะกล่าวในหัวข้อถัดถัดไป)
โดยข้อมูลทั้งหมดที่ผมอธิบายจะเก็บในรูปแบบของ table เราเรียก table ในส่วนนี้ว่า manifest table
เมื่อโปรแกรมชนิด managed ถูกทำงาน สิ่งแรกที่ runtime ทำงานก่อนคือ อ่านข้อมูลของ manifest table เพื่อที่จะทราบรายละเอียดของ Type ที่ module เรียกใช้และจำขนาดของหน่วยความจำตามที่ข้อมูล manifest กำหนด ขนาดของหน่วยความจำนี้สำคัญมากตอน runtime ทำการ compile IL code ไปเป็น native code เพราะเป็นขั้นตอนที่จะจองหน่วยความจำของตัวเครื่องจริงๆ
ในตอนหน้าเราจะมาดูรายละเอียด table ของ manifest table กันครับ
พบกันใหม่บทความหน้า สวัสดีครับ
TuChay
ทุกๆ Assembly module ไม่ว่าจะเป็น static หรือ dynamic จะทำหน้าที่เก็บข้อมูลของ file ต่างๆ ที่ assembly เรียกใช้รวมถึงอธิบายวิธีการใช้ข้อมูลนั้น ข้อมูลของ file ในทีนี้สามารถเป็นได้ในรูปแบบของรูปภาพ (jpg หรือ gif), file library ที่มีนามสุล DLL และถูกเรียกใช้โดย module นอกจากจะเก็บข้อมูลของ file แล้วยังเก็บข้อมูล ดังต่อไปนี้
Assembly name - ชื่อของ assembly เก็บข้อความเป็นตัวหนังสือ
Version number - version ของ assembly
Culture -ข้อมูลเกี่ยวกับภาษาที่ assembly รองรับ
Strong name - หัวข้อนี้จะกล่าวในบทความถัดไปครับ
Type reference - ข้อมูลเกี่ยวกับ Type ที่ Assembly มีการไป reference มาจาก module อื่น ข้อมูลส่วนนี้ จะเชื่อมไปยัง table ModuleRef และ TypeRef (อยู่ในกลุ่มของ reference table ซึ่งจะกล่าวในหัวข้อถัดถัดไป)
Information on reference assemblies - ข้อมูลเกี่ยวกับ Assembly อื่นที่ Assembly นี้มีการไป reference โดยข้อมูลส่วนนี้จะมีการเชื่อมไปยัง table AssemblyRef (อยู่ในกลุ่มของ reference table ซึ่งจะกล่าวในหัวข้อถัดถัดไป)
โดยข้อมูลทั้งหมดที่ผมอธิบายจะเก็บในรูปแบบของ table เราเรียก table ในส่วนนี้ว่า manifest table
เมื่อโปรแกรมชนิด managed ถูกทำงาน สิ่งแรกที่ runtime ทำงานก่อนคือ อ่านข้อมูลของ manifest table เพื่อที่จะทราบรายละเอียดของ Type ที่ module เรียกใช้และจำขนาดของหน่วยความจำตามที่ข้อมูล manifest กำหนด ขนาดของหน่วยความจำนี้สำคัญมากตอน runtime ทำการ compile IL code ไปเป็น native code เพราะเป็นขั้นตอนที่จะจองหน่วยความจำของตัวเครื่องจริงๆ
ในตอนหน้าเราจะมาดูรายละเอียด table ของ manifest table กันครับ
พบกันใหม่บทความหน้า สวัสดีครับ
TuChay