Presentation Transcript
EASE in :EASE in Where it all gets physical Where it all gets physical
Objectives :Objectives Introduce concepts of assemblies
Discuss elements of assemblies
Show how to build assemblies
Runtime aspects
Contents :Contents Section 1: Overview
Section 2: Concepts and Elements
Section 3: Assemblies at Buildtime
Section 4: Assemblies at Runtime
Section 1: Overview :Section 1: Overview Versioning and DLL conflicts must be resolved
Windows 2000 partially fixed DLL conflicts
New shared version still replaces the old
Physical units instead of logical
Easy installation/deinstallation procedures required
xcopy installation
Just delete the files!
What‘s an Assembly :What‘s an Assembly Runtime executable code = IL
Single point of entry
Fundamental unit
Version control
Reuse
Scoping
Identity
Security permissions
Runtime metadata
Static and Dynamic Assemblies :Static and Dynamic Assemblies Static
Generated by compilers
Loaded from disk or downloaded from the net
Dynamic
Built "on-the-fly"
From scripts or via Reflection.Emit
Can be transient
Assembly vs. Module :Assembly vs. Module Module is compiled unit
Modules contain types and global methods
Assemblies contain modules
An assembly consists of modules and resources
Assembly manifest references files
Dependencies :Dependencies Viewed as collection of exported resources
Independent of implementation
Assembly may depend on other assemblies
May import any public resource of other assembly
Types
Resource files
Etc.
Dependencies are recorded in the manifest
Resolved at runtime – no static linking
Type Referencing :Type Referencing ref: null, TypeA, module1 Module1 External Refs AssemblyA AssemblyB ref: null, TypeB, module2 ref: AssemblyB, TypeC, module3
Assembly vs. Namespace :Assembly vs. Namespace Namespaces are used to group names
Assemblies can contain several namespaces
Namespaces can be partitioned across assemblies
Types implemented twice are different!
Both must be included into project independently:
Namespaces are imported in the source code
Assemblies are referenced by compiler switch using System.Runtime.Remoting.Services; csc /r:System.Runtime.Remoting.DLL ...
Section 2: Concepts and Elements :Section 2: Concepts and Elements Elements of an assembly
Manifest
Versioning
Security
Physical representation
What's in it's name
Manifest: Standard Elements :Manifest: Standard Elements Manifest is table with info records
Manifest contains info about:
Assembly name
Version information
Strong name information
Culture information
Processor and OS
Files that make up this assembly
References to types and resources
Exported and local types
Manifest: Custom Elements :Manifest: Custom Elements AssemblyCompany
AssemblyConfiguration
AssemblyCopyright
AssemblyDefaultAlias
AssemblyDescription
AssemblyInformationalVersion
AssemblyProduct
AssemblyTitle
AssemblyTrademark
Multi-File Assemblies :Multi-File Assemblies Association based on metadata within assembly
Not linked by the file system Assembly.exe Module2.dll Graph.jpg Assembly Manifest Module Manifest Module1 Module2 Graph
Versioning :Versioning Manifest carries version information
Compatibility version
Major, minor, build, revision: 2.1.1254.0
Informational version
String stored in AssemblyInformationalVersion
References to other assemblies carry version info
Side-by-side execution :Side-by-side execution Run different versions simultaneously
Per machine
Or even per process
Requires special coding considerations
Issues with dependencies on machine resources
Process-wide resources
Security Considerations :Security Considerations Integrity of files is guaranteed by hash verification
Assembly carries permission requests
Security policy is applied to requests at load time
AuthentiCode digital signing
Strong names
Strong Names :Strong Names Simple name accompanied by:
Public key
Digital signature
Generated from assembly and private key
Prevent others from „taking over your namespace“
Protect version lineage
Assemblies with same strong name are identical
Versioning only works with strong named assemblies
Strong Name Utility :Strong Name Utility sn.exe provides options for:
Signature generation
Generate public/private key pair
Key management
Signature verification
Setting Cryptographic Service Provider (CSP) sn –k keyFile.snk
Assigning a Strong Name :Assigning a Strong Name Need to have a public-private key pair
Using attributes
Using al (assembly linker) [assembly:AssemblyKeyFile("sgKey.snk")]
[assembly:AssemblyKeyName("AContainer")] al myModule.dll /keyfile:sgKey.snk ...
Delaying Strong Name Assignment :Delaying Strong Name Assignment Access to private key might be restricted
Delayed (or partial) signing reserves space in file
Actual signing is deferred
Process works as follows:
Developer works with public key file only
Verification must be switched off
Full signing must be applied later [assembly:AssemblyKeyFile(„pubKey.snk")] [assembly:AssemblyDelaySign(true)] sn –Vr myAssembly.dll sn –R myAssembly.dll fullKey.snk
Using Strong Named Assemblies :Using Strong Named Assemblies Consumer of strong named assembly uses token
Token is portion of public key
Runtime verifies strong name signature
Referencing usually transparent
Compiler inserts token of referenced assembly
Dynamic loading requires explicit notion > sn –t myDll.DLL
Assembly.Load(“myDll,Version=1.0.0.1,Culture=neutral,PublicKeyToken=9b35aa32c18d4fb1”);
Section 3: More Tools and Deployment :Section 3: More Tools and Deployment Assembler ilasm
Disassembler ildasm
Global Assembly Cache
Installation
Assembler: ilasm :Assembler: ilasm "Assembles" IL streams into loadable files
Generates the metadata
Output can be disassembled by ildasm
No optimizations made
Dis-Assembly: ildasm :Dis-Assembly: ildasm "Disassembles" assemblies (or modules) into IL
Output can be reassembled by ilasm
GUI for examining an assembly
Manifest
Metadata
IL code
Global Assembly Cache Advantages :Global Assembly Cache Advantages Using the GAC has advantages:
Performance improvements
Integrity checking
File security
Versioning
Automatic pickup of Quick Fixes
Additional search location
Installation :Installation Private vs. shared assemblies
Private assemblies deployed in local directory
Shared assemblies stored in Global Assembly Cache
Cache viewer as shell extension (shfusion.dll)
Snap-In for Management Console (mscorcfg.msc) gacutil –i myAssembly.DLL
Section 4: Assemblies at Runtime :Section 4: Assemblies at Runtime Loading an assembly
Concept of Application Domain
JITting an assembly
PreJITting an assembly
Loading an Assembly :Loading an Assembly Assembly is Portable Executable (PE) file ...
... with CLR related information added
Runtime aware environment loads assembly directly
Unaware operating system loads assembly as PE
Entry point: stub that loads and calls CLR
CLR examines addtional header information
Application Domain :Application Domain Concept for application isolation
Provide isolation at lower cost than processes
AppDomains are created by the runtime host
AppDomain is created for each application
Direct references between AppDomains disallowed
Requires proxies or copied objects
Loader Optimization :Loader Optimization Assembly is SingleDomain by default
Each AppDomain loads and compiles assembly
Assembly can be marked for MultiDomain use
Assembly is compiled once
Mapped into all referencing AppDomains
A copy is available for each process
References to static data is indirected
Assembly is unloaded when process ends
MultiDomainHost
Copy of code is hosted in each AppDomain
Just-In-Time Compilation :Just-In-Time Compilation MSIL is made for compilation
Needs some per-method analysis
Code is compiled when needed
Compilation on a per-method base
Code that is not called is not compiled
Loader creates stub for each method
First step: Verification of type safety
JITted code is not persisted
PreJITting with ngen :PreJITting with ngen Complete compile at installation time
PreJITted assembly is installed in GAC
Speeds up loading time significantly
Both IL and native image are loaded
No verification needed
Native image is not used...
...When module version ID of IL is different
...If the same applies to any dependencies
...Assembly binding policy has changed
Fallback to normal JIT process
Summary :Summary Assemblies as logical DLLs
Anatomy of an assembly
Units of versioning
Strong names
Installation in Global Assembly Cache
Loading and Compiling
Questions? :Questions?