Top Banner
Assembly Where it all gets physical
35

Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Dec 21, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Assembly

Where it all gets physical

Page 2: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Objectives

Introduce concepts of assemblies

Discuss elements of assemblies

Show how to build assemblies

Runtime aspects

Page 3: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Contents

Section 1: Overview

Section 2: Concepts and Elements

Section 3: Assemblies at Buildtime

Section 4: Assemblies at Runtime

Page 4: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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!

Page 5: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

What‘s an Assembly

Runtime executable code = IL Single point of entry

Fundamental unit Version control Reuse Scoping Identity Security permissions

Runtime metadata

Page 6: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 7: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 8: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 9: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Type Referencing

Module2

Public Types

Assembly Types

ref: null, TypeA, module1

Module1

Public Types

Module Types

Public Types

Assembly Types

External Refs

Module3

Public Types

Module Types

Public Types

Assembly Types

External Refs

AssemblyA

AssemblyBref: null, TypeB, module2

ref: AssemblyB, TypeC, module3

Page 10: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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 ...

Page 11: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Section 2: Concepts and Elements

Elements of an assembly Manifest Versioning Security

Physical representation

What's in it's name

Page 12: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 13: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Manifest: Custom Elements

AssemblyCompany

AssemblyConfiguration

AssemblyCopyright

AssemblyDefaultAlias

AssemblyDescription

AssemblyInformationalVersion

AssemblyProduct

AssemblyTitle

AssemblyTrademark

Page 14: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 15: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 16: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 17: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 18: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 19: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 20: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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 ...

Page 21: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 22: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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”);

Page 23: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Section 3: More Tools and Deployment

Assembler ilasm

Disassembler ildasm

Global Assembly Cache

Installation

Page 24: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Assembler: ilasm

"Assembles" IL streams into loadable files Generates the metadata

Output can be disassembled by ildasm No optimizations made

Page 25: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Dis-Assembly: ildasm

"Disassembles" assemblies (or modules) into IL

Output can be reassembled by ilasm

GUI for examining an assembly Manifest Metadata IL code

Page 26: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Global Assembly Cache Advantages

Using the GAC has advantages: Performance improvements Integrity checking File security Versioning Automatic pickup of Quick Fixes Additional search location

Page 27: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 28: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Section 4: Assemblies at Runtime

Loading an assembly

Concept of Application Domain

JITting an assembly

PreJITting an assembly

Page 29: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 30: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 31: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 32: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 33: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

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

Page 34: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Summary

Assemblies as logical DLLs

Anatomy of an assembly

Units of versioning Strong names

Installation in Global Assembly Cache

Loading and Compiling

Page 35: Assembly Where it all gets physical. Objectives Introduce concepts of assemblies Discuss elements of assemblies Show how to build assemblies Runtime aspects.

Questions?