现在的位置: 首页 > 综合 > 正文

(3)程序集加载 Assembly类

2011年06月06日 ⁄ 综合 ⁄ 共 2598字 ⁄ 字号 评论关闭

=============C#.Net 篇目录==============

 

程序集是 .NET Framework 应用程序的构造块;程序集构成了部署、版本控制、重复使用、激活范围控制和安全权限的基本单元。

属性:

CodeBaseEntryPointEscapeCodeBaseEvidenceFullNameGlobalAssemblyCacheHostContextImageRuntimeVersionIsDynamicIsFullTrustedLocationManifestModulePermissionSetReflectionOnlySecurityRuleSet

事件:

实例方法:

CreateInstance()GetCustomAttributesData()GetExportedTypes()GetFile()GetFiles()GetLoadedModules()GetManifestResourceInfo()GetManifestResourceNames()GetManifestResourceStream()GetModule()GetModules()GetName()GetReferenceAssemblies()GetSatelliteAssembly()GetType()GetTypes()LoadModule()

接口方法

a)         ICustomAttributeProvider

GeCustomAttributes()IsDefined()

b)         ISerializable

静态方法:

CreateQualifiedName()GetAssembly()GetCallingAssembly()GetEntryAssembly()GeExecutingAssembly()Load()LoadFile()LoadFrom()LoadModule()LoadWithPartialName()ReflectionOnlyLoad()ReflectionOnlyLoadFrom()UnsafeLoadFrom()

 

1.         Assembly.ModuleResolve 事件

公共语言运行时类加载程序不能通过正常方法解析对程序集的内部模块的引用时发生。如使用 LoadFile(Path)、只反射加载等加载程序集,不会加载依赖程序集。

2.         CodeBase EscapedCodeBase Location

1)         CodeBase

获取最初指定的程序集的位置,例如,在 AssemblyName 对象中指定的位置。

如果程序集是使用Load(byte[]) 重载作为字节数组加载的,则此属性返回该方法的调用方的位置,而不是已加载程序集的位置。

2)         EscapedCodeBase 

获取 URI,包括表示基本代码的转义符。

3)         Location 

获取包含清单的已加载文件的路径或 UNC 位置。(绝对路径)

4)         术语:UNC (Universal Naming Convention) 统一命名约定

对于网络服务器上的目标文件,可使用“通用命名约定 (UNC)地址(UNC:“统一命名约定”地址,用于确定保存在网络服务器上的文件位置)。这些地址以“file:\\”开始并提供服务器名、共享名和文件的完整路径。例如,“file:\\server\share\path\project file.mpp”是绝对 UNC 地址。 

3.         IsDynamic

获取一个值,该值指示当前程序集是否是通过使用反射发出在当前进程中动态生成的。动态程序集由派生类 System.Reflection.Emit.AssemblyBuilder 表示;将动态程序集保存到磁盘后,该程序集就不再是动态的。

4.         CreateInstance()

从此程序集中查找指定的类型,并使用系统激活器 ( Activator.CreateInstance ) 创建它的实例。

可传递要搜索的类型的 Type.FullName 、搜索是否区分大小写、搜索成员标识BindingFlagsSystem.Reflection.Binder对象、类型构造函数的参数数组等参数。

5.         CreateQualifiedName()

创建由类型的程序集的显示名称限定的类型的名称。返回的字符串的格式为: <完整类型名称><程序集显示名称>   即: return (typeName + ", " + assemblyName)

6.         GetAssembly()GetCallingAssembly()GetEntryAssembly()GetExecutingAssembly()GetSatelliteAssembly()

1)         GeAssembly(Type type)  

获取在其中定义指定类的当前加载的程序集。

2)         GetCallingAssembly()     

返回调用当前正在执行的方法的方法的 Assembly

如果调用 GetCallingAssembly 方法的方法由实时 (JIT) 编译器内联扩展,或如果其调用方将内联扩展,则由 GetCallingAssembly 返回的程序集可能会发生异常。例如,考虑下列方法和程序集:

程序集 A1 中的方法 M1 调用 GetCallingAssembly

程序集 A2 中的方法 M2 调用 M1

程序集 A3 中的方法 M3 调用 M2

M1 未内联时,GetCallingAssembly 返回 A2。当 M1 内联时,GetCallingAssembly 返回 A3

使用MethodImplOptions.NoInlining可以阻止JIT在编译时把某些方法进行内联处理。EG[MethodImpl(MethodImplOptions.NoInlining)]

3)         GetEntryAssembly()

获取默认应用程序域中的进程可执行文件。在其他的应用程序域中,这是由 AppDomain.ExecuteAssembly 执行的第一个可执行文件。

如果一个非托管应用程序创建了使用 C#

抱歉!评论已关闭.