Assembly in C#

Assembly in C#: COM Specification के समय में Microsoft Documentation में किसी COM Class या COM Module (DLL / EXE) को Represent करने के लिए Component शब्द का प्रयोग किया जाता था। जबकि .NET Framework में इसी Concept को Assembly नाम से Refer किया जाता है, जो कि एक Software Component होता है और ये Software Component ठीक उसी तरह से कि Software में Plug and Play होता है, जिस तरह से कोई Hardware Component किसी अन्‍य Device में Plug and Play होता है।

Assembly in C#

Theoretically देखें तो एक Assembly एक प्रकार से COM Module के Equivalent ही है। लेकिन Practically देखें तो एक Assembly बहुत सारे Types (Classes)Physical Files ( .NET PE Files, Bitmap Files, etc… ) को Refer करता है, जिनकी जरूरत CLR को Runtime में Application को Successfully Run करने के लिए होती है।

साथ ही Assembly ही किसी Application Program के IL Code को Host भी करता है व Assembly ही Versioning, Deployment, Security Management, Parallel or Side-by-Side Execution, SharingReuse को भी Handle करता है।

सरल शब्दों में कहें तो Assembly किसी Application का एक Logical DLL या EXE होता है जबकि MANIFEST उसी Application का Detailed Description यानी METADATA होता है, जिसके साथ Application के Version, Use होने वाले Types, Resources आदि की जानकारी भी होती है।

.NET METADATA

METADATA वास्तव में किसी Resource का Machine-Readable Information होता है। ये Information Current Application Program से सम्बंधित विभिन्न प्रकार की Details Provide करता है। .NET में METADATA के अन्तर्गत Current Program में Used Types की Type Definitions, Version Information, External Assembly References व अन्‍य Standardized Information Store होती हैं।

जब दो Components, Systems या Objects एक दूसरे के साथ किसी तरह का Interaction करना चाहते हैं, तब ये जरुरी होता है कि दोनों में से कोई एक, दूसरे के बारे में कुछ Specific बातें जाने। COM Specification में इस Information को Interface Specification के नाम से जाना जाता था, जिसे Component Provider द्वारा Implement किया जाता था व Component को Use करने वाले Developer द्वारा Use किया जाता था। लेकिन .NET में इस जरूरत को METADATA के माध्‍यम से पूरा किया जाता है।

.NET MANIFEST – Assembly METADATA

Assembly MANIFEST भी एक METADATA होता है, जो कि Assembly के बारे में विभिन्न बातें Describe करता है। इस Metadata के अन्तर्गत Assembly की Unique Identity, Assembly में Included कुल Files की संख्‍या, External Assemblies का Reference, Exported Types, Exported ResourcesPermission Request आदि से सम्बंधित Details होती हैं, जिनका उपयोग .NET Platform द्वारा Cross-Language Interoperability Provide करने के लिए किया जाता है।

सरल शब्दों में कहें तो Component को Plug and Play करने के लिए जितनी भी Information की जरूरत होती है, वह Information इस MANIFEST में उपलब्ध होती है और चूंकि सारी Information Assembly के MANIFEST में ही Exist होती है, इसलिए Component से सम्बंधित किसी भी जानकारी को Windows Operating System की Registry में Store करने की जरूरत नहीं होती, जैसाकि COM Specification के दौरान होती थी।

IL or MSIL Code

किसी Assembly में IL Code यानी Current Application को Compile करने के बाद Generate होने वाला Intermediate Language Code होता है, जिसे CLR Runtime में Execute करता है। ये IL Code सामान्‍यत: उन Types को Use करता है, जिन्हें समान Assembly में Define किया गया होता है, लेकिन ये किसी अन्‍य Assembly में Stored किसी अन्‍य Type को भी Refer कर सकता है।

जब IL Code Current Assembly में Exist किसी Type को Refer करना चाहता है, तो उसे कुछ भी Special करने की जरूरत नहीं होती। लेकिन जब Current Application का Assembly किसी अन्‍य Assembly में Stored किसी Type (Class, Structure, Delegate, etc…) को Refer करना चाहता है, तब उसे Current Assembly में उस External Assembly का Reference Define करना जरुरी होता है।

साथ ही हर Assembly का हमेंशा एक Entry Point होता है, जिसे हम DllMain(), WinMain या Main() द्वारा Refer करते हैं और हमें इस Rule को हमेंशा Follow करना जरुरी होता है। यानी हम कोई भी ऐसा Assembly CLR पर Load करके Run नही करवा सकते, जिसमें इन में से कोई भी Entry Point न हो, क्योंकि CLR जब भी किसी Assembly को Load करके Run करता है, वह इन्हीं में से किसी Entry Point को Search करता है और मिलने वाले Entry Point से ही Code के Execution की शुरूआत करता है।

Versioning

.NET Framework में मूल रूप से चार तरह की Assemblies होती हैं:

Static Assemblies

ये .NET PE Files होते हैं, जो कि उस समय Create होते हैं जब हम हमारे .NET Program को Compile करते हैं। Static Assemblies Create करने के लिए हम C# के csc.exe, C/C++ के cl या VisualBasic.NET के vbc.exe में से किसी भी Compiler को Use कर सकते हैं।

Dynamic Assemblies

ये PE Formatted In-Memory Assemblies होती हैं, जो .NET Framework के System.Reflection.Emit Namespace की Classes का प्रयोग करते हुए Application के Runtime में Dynamically Create होती हैं।

Private Assemblies

ये वे Static Assemblies होती हैं, जिन्हें किसी Specific Application द्वारा Use किया जाता है।

Public or Shared Assemblies

ये वे Static Assemblies होती हैं, जिनका एक Unique Shared Name होना जरुरी होता है और इन्हें किसी भी Application द्वारा Use किया जा सकता है।

कोई Application किसी Private Assembly को Use करने के लिए उसके Static Path को Refer कर सकता है अथवा एक XML-Based Application Configuration File के माध्‍यम से उस Private Assembly को Refer कर सकता है। .NET में Assembly वह Smallest Unit होता है, जिसे हम एक Version Number Associate कर सकते हैं, जिसका Format निम्नानुसार होता है:

      <major_version>.<minor_version>.<build_number>.<revision>

Deployment

चूंकि किसी .NET Application के Assembly MANIFEST में किसी External Assembly का Reference Information होता है। साथ ही उस External Assembly का External Path व Version Information भी होता है, इसलिए अब हमें COM Specification की तरह Current Application Version की Information को Windows की Registry File में Store/Retrieve करते हुए Language Portability प्राप्त करने की जरूरत नहीं होती। क्योंकि हमारे Component का Version व Security Information भी हमारी Assembly के MANIFEST में Recorded रहता है, जिसका प्रयोग करके Current Application के लिए CLR हमेंशा सही Version के Shared Assembly को ही Load करता है।

Creating and Using Assemblies

जब हम Visual Studio में अथवा किसी Text Editor के माध्‍यम से कोई .NET Program Create करके .EXE या .DLL File के रूप में Compile करते हैं, तो प्राप्त होने वाली EXE/DLL File एक Single-Module Assembly File होती है। Single-Module Assembly Create करना आसान होता है क्योंकि इसे Create करने का काम Compiler स्वयं अपने स्तर पर कर लेता है।

लेकिन जब हम Multi-Module Assembly Create करना चाहते हैं, तब हम Visual Studio का प्रयोग नहीं कर सकते। उस स्थिति में हमें Command Line Options ही Use करना जरुरी होता है। Assembly Linker (al.exe) एक ऐसा ही Tool है, जिसका प्रयोग Multi-Module Assembly Create करने के लिए किया जा सकता है।

किसी Assembly को Use करने के लिए सबसे पहले हमें हमारे Code में उस Assembly को Import करना होता है। Assembly Import करने के लिए हमें .NET Supported Programming Language के Syntax को Use करना होता है। जैसे यदि हम C# Programming Language Use कर रहे हैं, तो System नाम की Assembly को Import करने के लिए हमें निम्नानुसार Using Statement Use करना होगा:

      using System;

फिर अपना Program Create करने के बाद जब हम हमारी Assembly को Build करते हैं यानी जब हम हमारे Program को Compile करते हैं, तब हमें हमारे Compiler को बताना होता है कि हम किस External Assembly को Reference कर रहे हैं। यहां भी यदि हम C# Compiler Use कर रहे हैं, तो हमें निम्नानुसार तरीके से Command Line Parameters द्वारा External Assembly को Specify करना होता है:

      C:\compiler\path\>csc /r:system.dll .cs

इस Compile Statement में हम .cs नाम की अपनी C# Program File को Compile कर रहे हैं, जबकि अपने Program File में हमने System नाम की Assembly को Import किया है, इसलिए Program Compile करते समय हमने “/r:” Option के साथ उस system.dll नाम की उसी External Assembly को Reference किया है। (Assembly in C#)

CLR in .NET
How CLR executes .NET Application?

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW GET DEMO REVIEWS