CLR Via C# 3rd 阅读摘要 -- Chapter 2 - Building, Packaging, Deploying, and Administering Applications and Types
.Net Framework Deployment Goals
1. “DLL Hell”问题的由来,以及.NET的安全模型CAS(Code Access Security)。
Building Types into a Module
1. winexe, exe, library,csc.exe在编译输出目标时的常用开关:/out;/t[arget];/r[eference];/nostdlib;
2. Response Files的作用,全局和本地的rsp文件;
3. 编译器在查找/reference依赖文件时的遍历顺序:当前目录->编译器所在目录->/lib开关指定的目录->LIB环境变量指定的目录。
A Brief Look at Metadata
1. 托管PE文件的四个主要部分:PE32(+) Header、CLR Header、Metadata、IL;
2. Metadata的3个分类:
- Definition(ModuleDef,TypeDef,MethodDef,FieldDef,ParamDef,PropertyDef,EventDef);
- Reference(AssemblyDef,ModuleDef,TypeDef,MemberDef);
- Manifest(AssemblyDef,FileDef,ManifestResourceDef,ExportTypesDef)。
3.用ILDASM.exe来看MetaInfo。
Combining Modules to Form an Assembly
1. 程序集的特点:
- 定义了可重用类型;
- 有版本号来标记;
- 有关联的安全信息。
2. 程序集的作用:可重用类型的逻辑与物理概念分离,是复用、安全、版本的最小单元;
3.一个程序集可以有多个文件(multifiles assembly),使用多文件程序集的3个原因:
- 分片出售,下载,安装;
- 在程序集中加入资源和数据文件;
- 多语言分别实现。
4. VS Studio IDE不支持多文件程序集,必须使用命令行工具;
5. 如何输出模块不含有Manifest元数据?/t[arget]:module; 编译器通过/addmodule附加到目标上;
6. Metadata Tokens 4-bytes的含义,CorHdr.h中的CorTokenType类型。
7. 如何在引用对话框中的.NET标签中显示自己的程序集?HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/AssemblyFolders/MyLibName;
8. 使用AL.exe,/main:
9. 在程序集中加入资源文件:/embed[resource],/link[resource]
Assembly Version Resource Information
1. 获得程序集的资源信息:System.Diagnostics.FileVersionInfo's GetVersionInfo;
2. AssemblyInfo.cs;
3. 程序集版本号:Major.Minor.Build.Revision。
Culture
1. Culture Neutral;
2. Satellite Assemblies;
3. AL.exe /c[ulture]:text。当发布satellite assembly时,应该放在匹配的子目录下,比如:D:\MyApp\en-US。
Simple Application Deployment(Privately Deployed Assemblies)
1. 如何发布程序集,这里讲了非全局发布的情况。
Simple Administrative Control(Configuration)
1. 配置文件的比较;
2. 遍历程序集的策略(为什么这么麻烦呢,给出一条规则,就必须放这起这个名不就行了?)
3. Machine.config、Web.config、MyApp.exe.config。