แอสเซมบลี. NET คืออะไร


193

แอสเซมบลี. NET คืออะไร ฉันเรียกดูผ่านเน็ตและฉันไม่สามารถเข้าใจคำจำกัดความได้


11
ได้อ่านของCLR ผ่าน C # คุณจะรู้ทั้งหมดเกี่ยวกับมันในตอนท้าย ฉันขอแนะนำหนังสือเล่มนี้
David Neale

คำตอบ:


169

กล่าวง่ายๆว่า: โค้ดอัน (precompiled) ที่สามารถประมวลผลได้โดยสภาพแวดล้อมรันไทม์. NET โปรแกรม. NET ประกอบด้วยแอสเซมบลีตั้งแต่หนึ่งตัวขึ้นไป


30
@KimJongWoo - ไม่ไฟล์ Jar เป็นเพียงไฟล์ซิปที่มีไฟล์ bytecode ที่คอมไพล์แล้ว แอสเซมบลีคือไฟล์ PE (ฟอร์แมตแบบพกพาปฏิบัติการ) (เช่น DLL หรือ EXE) แต่แนวคิดในการให้บริการวัตถุประสงค์ที่คล้ายกัน
Erik Funkenbusch

ดังนั้นมันจึงเป็นเหมือน.classไฟล์ใน Java-world?
mljrg

245

Assembly เป็นหน่วยที่เล็กที่สุดในการปรับใช้แอปพลิเคชั่น. net มันอาจจะเป็นdllหรือexe
ส่วนใหญ่มีสองประเภท:

  1. การชุมนุมส่วนตัว: dll หรือ exe ซึ่งเป็นทรัพย์สินของแอปพลิเคชันเดียวเท่านั้น โดยทั่วไปจะถูกเก็บไว้ในโฟลเดอร์รูทของแอปพลิเคชัน

  2. แอสเซมบลีสาธารณะ / ใช้ร่วมกัน: เป็น dll ที่สามารถใช้งานได้หลายแอพพลิเคชั่นในเวลาเดียวกัน ที่ใช้ร่วมกันชุมนุมถูกเก็บไว้ในGACเช่นแคชสมัชชาทั่วโลก

ฟังดูยากไหม Naa ....
GAC เป็นเพียงโฟลเดอร์C: \ Windows \ Assemblyที่คุณสามารถค้นหาแอสเซมบลีสาธารณะ / dll ของซอฟต์แวร์ทั้งหมดที่ติดตั้งในพีซีของคุณ

นอกจากนี้ยังมีประเภทที่สามและเป็นที่รู้จักน้อยที่สุดของการชุมนุม: สมัชชาดาวเทียม
แอสเซมบลีของดาวเทียมประกอบด้วยวัตถุคงที่เท่านั้นเช่นรูปภาพและไฟล์ที่ไม่สามารถดำเนินการได้อื่น ๆ

หวังว่านี่จะช่วยผู้อ่าน!


3
โปรดทราบว่าตำแหน่งนั้นแตกต่างกันสำหรับ. NET 4.0: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
TrueWill

ที่อาจได้รับช้า หลังจากโฟลเดอร์ได้รับหนึ่งพันรายการหน้าต่างจะช้าลงพยายามเดินแผนผังไดเรกทอรีหรือเพียงอ่านไดเรกทอรี
Jim Michaels

@mangeshkt - เป็นไปได้หรือไม่ที่จะคัดลอก dll ของแอปพลิเคชั่นหนึ่งและนำไปไว้ในไดเรกทอรีรากของอีกแอปหนึ่งฉันจะใช้ฟังก์ชั่นของอันที่ 1 ได้หรือไม่?
Shivam657

57

ประกอบ

เมื่อคุณรวบรวมแอปพลิเคชันรหัส MSIL ที่สร้างขึ้นจะถูกเก็บไว้ในชุดประกอบ แอสเซมบลีรวมทั้งแฟ้มแอปพลิเคชันที่ปฏิบัติการได้ที่คุณสามารถเรียกใช้โดยตรงจาก Windows โดยไม่จำเป็นต้องใช้โปรแกรมอื่น ๆ (เหล่านี้มีนามสกุลไฟล์. exe) และไลบรารี (ซึ่งมีนามสกุล. dll) สำหรับแอปพลิเคชันอื่น ๆ

นอกเหนือจากการมี MSIL แล้วแอสเซมบลียังรวมข้อมูลเมตา (นั่นคือข้อมูลเกี่ยวกับข้อมูลที่มีอยู่ในแอสเซมบลีที่รู้จักกันว่าเมทาดาทา) และทรัพยากรเพิ่มเติม (ข้อมูลเพิ่มเติมที่ใช้โดย MSIL เช่นไฟล์เสียงและรูปภาพ) ข้อมูลเมตาช่วยให้แอสเซมบลีสามารถอธิบายตนเองได้อย่างสมบูรณ์ คุณไม่จำเป็นต้องมีข้อมูลอื่นใดในการใช้แอสเซมบลีซึ่งหมายความว่าคุณหลีกเลี่ยงสถานการณ์เช่นการไม่สามารถเพิ่มข้อมูลที่จำเป็นในการลงทะเบียนระบบและอื่น ๆ ซึ่งมักจะเป็นปัญหาเมื่อพัฒนากับแพลตฟอร์มอื่น ๆ

ซึ่งหมายความว่าการปรับใช้แอปพลิเคชันมักทำได้ง่ายเพียงคัดลอกไฟล์ลงในไดเรกทอรีบนคอมพิวเตอร์ระยะไกล เนื่องจากไม่ต้องการข้อมูลเพิ่มเติมในระบบเป้าหมายคุณสามารถเรียกใช้ไฟล์ปฏิบัติการจากไดเรกทอรีนี้และ (สมมติว่าติดตั้ง. NET CLR) คุณก็พร้อมใช้งาน

แน่นอนว่าคุณไม่จำเป็นต้องรวมทุกอย่างที่จำเป็นในการเรียกใช้แอปพลิเคชันไว้ในที่เดียว คุณอาจเขียนโค้ดบางอย่างที่ทำงานที่ต้องการโดยหลายแอพพลิเคชั่น ในสถานการณ์เช่นนั้นมักจะมีประโยชน์ในการวางรหัสที่นำกลับมาใช้ใหม่ในสถานที่ที่ทุกโปรแกรมสามารถเข้าถึงได้ ใน. NET Framework นี่คือ Global Assembly Cache (GAC) การวางรหัสใน GAC นั้นง่าย - คุณเพียงแค่วางแอสเซมบลีที่มีรหัสในไดเรกทอรีที่ประกอบด้วยแคชนี้


เพื่อความชัดเจนยิ่งขึ้น "เมื่อคุณรวบรวมแอปพลิเคชันรหัส MSIL ที่สร้างขึ้นจะถูกเก็บไว้ในชุดประกอบ" เพียงเพิ่มเพื่อดูเนื้อหาของชุดประกอบที่คุณสามารถใช้ ILSPY
Sandeep

33

แอสเซมบลีเป็นแฟ้ม. dll จริงบนฮาร์ดไดรฟ์ของคุณที่เก็บคลาสใน. NET Framework ตัวอย่างเช่นคลาสทั้งหมดที่มีอยู่ใน ASP.NET Framework จะอยู่ในแอสเซมบลีชื่อ System.Web.dll

แม่นยำยิ่งขึ้นชุดประกอบเป็นหน่วยหลักของการปรับใช้ความปลอดภัยและการควบคุมเวอร์ชันใน. NET Framework เนื่องจากแอสเซมบลีสามารถขยายหลายไฟล์แอสเซมบลีมักจะเรียกว่า "ตรรกะ" dll

บันทึก

.NET Framework (รุ่น 2.0) ประกอบด้วย 51 แอสเซมบลี

แอสเซมบลีมีสองประเภท: ส่วนตัวและที่ใช้ร่วมกัน แอสเซมบลีส่วนตัวสามารถใช้ได้โดยแอปพลิเคชันเดียวเท่านั้น ในทางตรงกันข้ามแอสเซมบลีที่ใช้ร่วมกันสามารถใช้งานได้โดยแอปพลิเคชันทั้งหมดที่อยู่บนเซิร์ฟเวอร์เดียวกัน

แอสเซมบลีที่ใช้ร่วมกันอยู่ในแคชแอสเซมบลีส่วนกลาง (GAC) ตัวอย่างเช่นแอสเซมบลี System.Web.dll และแอสเซมบลีอื่น ๆ ทั้งหมดที่รวมอยู่ใน. NET Framework จะอยู่ในแคชแอสเซมบลีส่วนกลาง

บันทึก

Global Assembly Cache นั้นอยู่ในโฟลเดอร์ \ WINDOWS \ Assembly ของคอมพิวเตอร์ของคุณ มีสำเนาแยกต่างหากของทุกแอสเซมบลีในโฟลเดอร์ \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 ของคุณ แอสเซมบลีชุดแรกถูกใช้ที่รันไทม์และชุดที่สองถูกใช้ในเวลาคอมไพล์

ก่อนที่คุณจะสามารถใช้คลาสที่มีอยู่ในชุดประกอบในแอปพลิเคชันของคุณคุณต้องเพิ่มการอ้างอิงไปยังชุดประกอบ โดยค่าเริ่มต้นแอปพลิเคชัน ASP.NET อ้างอิงแอสเซมบลีที่พบบ่อยที่สุดที่มีอยู่ในแคชแอสเซมบลีส่วนกลาง:

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

ในการใช้คลาสใด ๆ ใน. NET Framework คุณต้องทำสองสิ่ง ขั้นแรกแอปพลิเคชันของคุณต้องอ้างอิงแอสเซมบลีที่ประกอบด้วยคลาส ประการที่สองแอปพลิเคชันของคุณจะต้องนำเข้าเนมสเปซที่เกี่ยวข้องกับคลาส

ในกรณีส่วนใหญ่คุณจะไม่ต้องกังวลเกี่ยวกับการอ้างอิงแอสเซมบลีที่จำเป็นเนื่องจากแอสเซมบลีทั่วไปส่วนใหญ่จะอ้างอิงโดยอัตโนมัติ อย่างไรก็ตามถ้าคุณต้องการใช้แอสเซมบลีแบบพิเศษคุณต้องเพิ่มการอ้างอิงอย่างชัดเจนในแอสเซมบลี ตัวอย่างเช่นถ้าคุณต้องการโต้ตอบกับ Active Directory โดยใช้คลาสใน System.DirectoryServices เนมสเปซคุณจะต้องเพิ่มการอ้างอิงถึงแอสเซมบลี System.DirectoryServices.dll ในแอปพลิเคชันของคุณ

แต่ละรายการคลาสในเอกสาร. NET Framework SDK แสดงรายการชุดประกอบและเนมสเปซที่เกี่ยวข้องกับคลาส ตัวอย่างเช่นถ้าคุณค้นหาคลาส MessageQueue ในเอกสารคุณจะพบว่าคลาสนี้อยู่ใน System.Messaging namespace ที่อยู่ในชุดประกอบ System.Messaging.dll

ถ้าคุณใช้ Visual Web Developer คุณสามารถเพิ่มการอ้างอิงไปยังแอสเซมบลีอย่างชัดเจนโดยเลือกเมนูตัวเลือกเว็บไซต์เพิ่มการอ้างอิงและเลือกชื่อของแอสเซมบลีที่คุณต้องการอ้างอิง ตัวอย่างเช่นการเพิ่มการอ้างอิงไปยังแอสเซมบลี System.Messaging.dll ผลลัพธ์ในแฟ้มการกำหนดค่าเว็บในรายการ 1.4 ที่ถูกเพิ่มลงในแอปพลิเคชันของคุณ

เช่น. Web.Config

enter code here

ถ้าคุณไม่ต้องการใช้ Visual Web Developer คุณสามารถเพิ่มการอ้างอิงไปยังแอสเซมบลี System.Messaging.dll โดยการสร้างไฟล์ในตัวอย่างข้างต้นด้วยมือ


1
อีกมากมายทางเทคนิคที่คำตอบที่ยอมรับนี้ควรเป็นคำตอบที่ได้รับการยอมรับ
sparkyShorts

8

Wikipedia ต้องบอกว่า:

ในกรอบงาน Microsoft .NET แอสเซมบลีเป็นไลบรารีรหัสที่คอมไพล์บางส่วนสำหรับใช้ในการปรับใช้การกำหนดรุ่นและความปลอดภัย มีสองประเภทคือ: กระบวนการแอสเซมบลี (EXE) และแอสเซมบลีไลบรารี (DLL) แอสเซมบลีของกระบวนการแสดงถึงกระบวนการซึ่งจะใช้คลาสที่กำหนดไว้ในแอสเซมบลีของไลบรารี แอสเซมบลี. NET ประกอบด้วยรหัสใน CIL ซึ่งโดยปกติแล้วจะสร้างจากภาษา CLI แล้วคอมไพล์เป็นภาษาเครื่องเมื่อรันไทม์โดย CLR just-in-time คอมไพเลอร์ แอสเซมบลีอาจประกอบด้วยหนึ่งไฟล์ขึ้นไป ไฟล์รหัสเรียกว่าโมดูล แอสเซมบลีสามารถประกอบด้วยโมดูลรหัสมากกว่าหนึ่งและเนื่องจากเป็นไปได้ที่จะใช้ภาษาต่าง ๆ เพื่อสร้างโมดูลรหัสเป็นไปได้ทางเทคนิคในการใช้ภาษาต่าง ๆ เพื่อสร้างแอสเซมบลี

หากคุณเรียกดูจริงๆมันจะช่วยได้ถ้าคุณชี้แจงสิ่งที่คุณไม่เข้าใจ


7

ดูสิ่งนี้ :

ในกรอบงาน Microsoft .NET แอสเซมบลีเป็นไลบรารีรหัสที่คอมไพล์บางส่วนสำหรับใช้ในการปรับใช้การกำหนดรุ่นและความปลอดภัย


7

การรวบรวมทางกายภาพของคลาสอินเทอร์เฟซ enum ฯลฯ ซึ่งอยู่ในรหัส IL ซึ่งสามารถเป็นไฟล์. EXE หรือ. DLL ไฟล์ EXE เป็นไฟล์ปฏิบัติการและ. DL สามารถใช้แบบไดนามิกในภาษาใด ๆ . net ที่รองรับ


6

แอสเซมบลีเป็นหน่วยรันไทม์ประกอบด้วยชนิดและทรัพยากรอื่น ๆ ทุกประเภทในชุดประกอบมีหมายเลขรุ่นเดียวกัน

บ่อยครั้งที่แอสเซมบลีเดียวมีเนมสเปซเดียวเท่านั้นและถูกใช้โดยหนึ่งโปรแกรม แต่มันสามารถครอบคลุมหลาย namespaces นอกจากนี้เนมสเปซหนึ่งเดียวสามารถแพร่กระจายไปยังหลาย ๆ แอสเซมบลีได้ ในการออกแบบขนาดใหญ่แอสเซมบลีอาจประกอบด้วยหลายไฟล์ที่จัดขึ้นพร้อมกันด้วยรายการ (เช่นสารบัญ)

ใน C # แอสเซมบลีเป็นการปรับใช้ที่เล็กที่สุดของแอพลิเคชัน. สุทธิสามารถเป็น dll หรือ exe มันมีสองชนิด: 1. แอสเซมบลีส่วนตัว 2. แอสเซมบลีสาธารณะ / สาธารณะ


6

นอกจากคำตอบที่ยอมรับแล้วฉันต้องการยกตัวอย่างให้คุณ!

ตัวอย่างเช่นเราทุกคนใช้

System.Console.WriteLine()

แต่รหัสสำหรับ System.Console.WriteLine!
รหัสใดที่ทำให้ข้อความบนคอนโซลเป็นจริง

ถ้าคุณดูที่หน้าแรกของเอกสารสำหรับคลาส Consoleคุณจะเห็นด้านบนด้านล่าง: Assembly: mscorlib (ใน mscorlib.dll) สิ่งนี้บ่งชี้ว่ารหัสสำหรับคลาส Console ตั้งอยู่ใน assem-bly ชื่อ mscorlib แอสเซมบลีอาจประกอบด้วยหลายไฟล์ แต่ในกรณีนี้เป็นไฟล์เดียวเท่านั้นซึ่งเป็นไลบรารีลิงก์แบบไดนามิก mscorlib.dll

ไฟล์ mscorlib.dll มีความสำคัญมากใน. NET เป็น DLL หลักสำหรับไลบรารีคลาสใน. NET และประกอบด้วยคลาส NET. NET และโครงสร้างพื้นฐานทั้งหมด

ถ้าคุณรู้จัก C หรือ C ++ โดยทั่วไปคุณต้องมี #include directive ที่ด้านบนที่อ้างถึงไฟล์ส่วนหัว ไฟล์ include จัดเตรียมต้นแบบฟังก์ชันการทำงานให้กับคอมไพเลอร์ ในทางตรงกันข้ามคอมไพเลอร์ C # ไม่จำเป็นต้องใช้ไฟล์ส่วนหัว ในระหว่างการรวบรวมคอมไพเลอร์ C # เข้าถึงไฟล์ mscorlib.dll โดยตรงและรับข้อมูลจากข้อมูลเมตาในไฟล์นั้นที่เกี่ยวข้องกับคลาสทั้งหมดและประเภทอื่น ๆ ที่กำหนดไว้ในนั้น

คอมไพเลอร์ C # สามารถสร้างได้ว่า mscorlib.dll มีคลาสชื่อ Console ในเนมสเปซชื่อ System ด้วยวิธีการที่ชื่อว่า WriteLine ซึ่งยอมรับอาร์กิวเมนต์ชนิดสตริงเดียว

คอมไพเลอร์ C # สามารถระบุได้ว่าการเรียก WriteLine นั้นถูกต้องและคอมไพเลอร์สร้างการอ้างอิงไปยังแอสเซมบลี mscorlib ในการปฏิบัติการ

โดยค่าเริ่มต้นคอมไพเลอร์ C # จะเข้าถึง mscorlib.dll แต่สำหรับ DLLs อื่น ๆ คุณจะต้องบอกคอมไพเลอร์แอสเซมบลีที่มีการเรียนอยู่ สิ่งเหล่านี้เรียกว่าการอ้างอิง

ฉันหวังว่ามันชัดเจนตอนนี้!

จาก DotNetBookZero Charles pitzold


5

MSDN มีคำอธิบายที่ดี :

แอสเซมบลีเป็นหน่วยการสร้างของโปรแกรมประยุกต์. NET Framework มันเป็นหน่วยพื้นฐานของการปรับใช้การควบคุมเวอร์ชันการใช้ซ้ำการกำหนดขอบเขตการเปิดใช้งานและการอนุญาตด้านความปลอดภัย แอสเซมบลีคือชุดของชนิดและทรัพยากรที่สร้างขึ้นเพื่อทำงานร่วมกันและตั้งหน่วยฟังก์ชันการทำงานแบบลอจิคัล แอสเซมบลีจัดเตรียมรันไทม์ภาษาทั่วไปด้วยข้อมูลที่จำเป็นต้องทราบของการใช้งานชนิด สำหรับรันไทม์ชนิดไม่มีอยู่นอกบริบทของแอสเซมบลี


5

แอสเซมบลีคือชุดของชนิดและทรัพยากรที่เป็นหน่วยทางลอจิคัลของฟังก์ชันการทำงาน ชนิดทั้งหมดใน. NET Framework ต้องมีอยู่ในแอสเซมบลี รันไทม์ภาษาทั่วไปไม่สนับสนุนชนิดนอกเหนือจากแอสเซมบลี ทุกครั้งที่คุณสร้างแอปพลิเคชัน Microsoft Windows®, Windows Service, Class Library หรือแอปพลิเคชันอื่น ๆ ด้วย Visual Basic .NET คุณจะสร้างแอสเซมบลีเดียว แอสเซมบลีแต่ละครั้งจะถูกเก็บไว้เป็นไฟล์. exe หรือ. dll

ที่มา: https://msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

สำหรับผู้ที่มีพื้นหลัง Java อย่างฉันหวังว่าแผนภาพต่อไปนี้จะอธิบายแนวคิด -

แอสเซมบลีก็เหมือนไฟล์ jar (มีไฟล์. class หลายไฟล์) รหัสของคุณสามารถอ้างอิงแอสเซมบลีที่มีอยู่หรือโค้ดของคุณเองสามารถเผยแพร่เป็นแอสเซมบลีสำหรับโค้ดอื่นเพื่อการอ้างอิงและการใช้งาน (คุณสามารถคิดว่านี่เป็นไฟล์ jar ใน Java ที่คุณสามารถเพิ่มในการอ้างอิงโครงการของคุณ)

ในตอนท้ายของวันแอสเซมบลีเป็นรหัสที่คอมไพล์ที่สามารถเรียกใช้บนระบบปฏิบัติการใด ๆ ที่ติดตั้ง CLR นี่เหมือนกับการพูดว่าไฟล์. class หรือ jar ที่บันเดิลสามารถรันบนเครื่องใด ๆ ที่ติดตั้ง JVM

ป้อนคำอธิบายรูปภาพที่นี่


2

ใน. Net แอสเซมบลีสามารถ :

คอลเลกชันต่างๆที่สามารถจัดการชิ้นส่วนบรรจุTypes (or Classes), Resources (Bitmaps/Images/Strings/Files), Namespaces, Config FilesรวบรวมPrivatelyหรือPublicly; ปรับใช้กับ localหรือShared (GAC)โฟลเดอร์; discover-ableโดยคนอื่น ๆ programs/assembliesและ; สามารถ version-ed


2

เนื่องจากแอสเซมบลีเป็นหน่วยที่เล็กที่สุดของการรักษาความปลอดภัยการกำหนดรุ่นการปรับใช้และการใช้งานซ้ำของรหัสใน Microsoft.Net

มันมี:

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

1

แอสเซมบลีเป็นส่วนพื้นฐานของการเขียนโปรแกรมด้วย. NET Framework มันมีรหัสที่ CLR ดำเนินการรหัส MSIL (Microsoft Intermediate Language) ในไฟล์เรียกทำงานแบบพกพาจะไม่ถูกเรียกใช้งานหากไม่มีไฟล์แอสเซมบลีที่เกี่ยวข้อง


1

แอปพลิเคชั่น. NET สร้างขึ้นโดยการประกอบหลาย ๆ ชุดเข้าด้วยกัน พูดง่ายๆคือชุดประกอบไม่มีอะไรมากไปกว่าไบนารีที่อธิบายตัวเอง (DLL หรือ EXE) ที่มีเวอร์ชันซึ่งประกอบด้วยคอลเลกชันประเภท (คลาส, อินเทอร์เฟซ, โครงสร้าง, ฯลฯ ) และการคัดเลือกเพิ่มเติม (รูปภาพ, ตารางสตริง สิ่งหนึ่งที่ต้องระวังอย่างเจ็บปวดในตอนนี้ก็คือองค์กรภายในของแอสเซมบลี. NET นั้นไม่มีอะไรเหมือนกับองค์กรภายในของเซิร์ฟเวอร์ COM คลาสสิก (โดยไม่คำนึงถึงนามสกุลไฟล์ที่แชร์)


1

ใน. NET เมื่อเราคอมไพล์ซอร์สโค้ดแล้วแอสเซมบลีจะถูกสร้างขึ้นใน Visual Studio การชุมนุมประกอบด้วยสองส่วน Manifest และ IL (ภาษาระดับกลาง) Manifest มีข้อมูลเมตาแอสเซมบลีหมายถึงข้อกำหนดเวอร์ชันของแอสเซมบลีข้อมูลความปลอดภัยชื่อและแฮชของไฟล์ทั้งหมดที่ประกอบเป็นแอสเซมบลี IL มีข้อมูลเกี่ยวกับการเรียนการก่อสร้างวิธีการหลัก ฯลฯ



1

โซลูชันVisual Studioประกอบด้วยโครงการหนึ่งโครงการขึ้นไป ตัวอย่าง: โครงการคอนโซลสามารถผลิตประกอบ แอสเซมบลีเป็นรหัสที่มีตรรกะที่สามารถจัดส่งไปยังลูกค้าและทางกายภาพเป็น. EXE (โปรแกรมที่เรียกใช้งานได้) หรือ. DLL (สามารถใช้งานได้โดยโปรแกรมอื่น)


0

แอสเซมบลีประกอบด้วยข้อมูลเกี่ยวกับเนื้อหาการกำหนดรุ่นและการอ้างอิงแอปพลิเคชันที่ใช้ไม่จำเป็นต้องพึ่งพาแหล่งภายนอกเช่นรีจิสทรีบนระบบ Windows เพื่อให้ทำงานได้อย่างถูกต้อง แอสเซมบลีลดความขัดแย้ง. dll และทำให้แอปพลิเคชันของคุณเชื่อถือได้มากขึ้นและง่ายต่อการใช้งาน

มันเป็นคอลเลกชันประเภทและทรัพยากรที่สร้างขึ้นเพื่อทำงานร่วมกันและสร้างหน่วยการใช้งานที่เป็นตรรกะ แอสเซมบลีในรูปแบบของไฟล์ executable (.exe) หรือ dynamic link library (.dll) และเป็นหน่วยการสร้างของแอ็พพลิเคชัน. NET พวกเขาจัดเตรียมรันไทม์ภาษาทั่วไปพร้อมกับข้อมูลที่จำเป็นต้องทราบเกี่ยวกับการใช้งานประเภท

ทุกชุดประกอบมีไฟล์รายการชุดประกอบ คล้ายกับสารบัญรายการประกอบมี:

  • เอกลักษณ์ของแอสเซมบลี (ชื่อและรุ่น)
  • ตารางไฟล์อธิบายไฟล์อื่น ๆ ทั้งหมดที่ประกอบขึ้นเช่นแอสเซมบลีอื่น ๆ ที่คุณสร้างขึ้นว่าไฟล์. exe หรือ. dll ของคุณอาศัยไฟล์บิตแมปหรือไฟล์ Readme
  • รายการอ้างอิงแอสเซมบลีซึ่งเป็นรายการของการอ้างอิงภายนอกทั้งหมดเช่น. dll หรือไฟล์อื่น ๆ การอ้างอิงแอสเซมบลีประกอบด้วยการอ้างอิงไปยังวัตถุทั้งส่วนกลางและส่วนตัว ใน. NET Framework วัตถุส่วนกลางจะอยู่ในแคชแอสเซมบลีส่วนกลาง (GAC) System.IO.dll เป็นตัวอย่างของแอสเซมบลีใน GAC วัตถุส่วนตัวจะต้องอยู่ในระดับไดเรกทอรีที่หรือต่ำกว่าไดเรกทอรีที่ติดตั้งแอปของคุณ

ในการใช้แอสเซมบลีในแอปพลิเคชันคุณต้องเพิ่มการอ้างอิง เมื่อมีการอ้างอิงแอสเซมบลีชนิดที่เข้าถึงคุณสมบัติวิธีการและสมาชิกอื่น ๆ ของเนมสเปซทั้งหมดจะพร้อมใช้งานสำหรับแอปพลิเคชันของคุณราวกับว่ารหัสของพวกเขาเป็นส่วนหนึ่งของไฟล์ต้นฉบับของคุณ

ดังนั้นเราทุกคนรู้ว่าซอร์สโค้ดของเราถูกแปลงเป็น Microsoft Intermediate Language (MSIL) เมื่อรันไทม์ CLR (Common Languge Runtime) แปลง MSIL เป็นรหัสเนทิฟด้วยคอมไพเลอร์ JIT ก่อนที่จะทำการแปลงรหัส MSIL จะต้องผ่านกระบวนการตรวจสอบที่ตรวจสอบ MSIL + MetaData (ชื่อแอสเซมบลีเวอร์ชันการอ้างอิง): เพื่อค้นหาว่าสามารถกำหนดรหัสให้ปลอดภัยได้หรือไม่ ถ้ามันผ่านการตรวจสอบแล้ว MSIL จะถูกแปลงเป็นรหัสพื้นเมือง วิธีการที่เรียกทั้งหมดจะถูกแปลงเป็นภาษาเครื่องและบันทึกไว้ในแคชสำหรับการใช้งานในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.