C#之程序集
程序集的定义:
1.程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。
2.程序集是组件复用,以及实施安全策略和版本策略的最小单位。
3.程序集是包含一个或者多个类型定义文件和资源文件的集合。在程序集包含的所有文件中,有一个文件用于保存清单。(清单是元数据部分中一组数据表的集合,其中包含了程序集中一部分文件的名称,描述了程序集的版本,语言文化,发布者,共有导出类型,以及组成该程序集的所有文件)。
程序集的物理表现:
1.可执行程序集:存在一个用于表示EXE的文件,这个文件是程序集的入口点。
2.提供功能的程序集:存在一个用于表示DLL的文件,这个文件是程序集的入口点。
程序集和托管模块的关系:
1.可以使用 csc /t:module type1.cs
csc /t:module type2.cs
这样就可以生成两个托管模块: type1.netmodule type2.netmodule
2.使用命令将模块集成到程序集中:
csc /out:xxx.dll /t:library /addmodule: type1.netmodule type2.netmodule xxx.cs
这样就有了程序集xxx.dll: 它由xxx.dll type1.netmodule type2.netmodule 组成。xxx.dll代表了这组程序集。xxx.dll也可以是xxx.exe。也可以使用al来创建:
Al /out:xxx.dll /t:library type1.netmodule type2.netmodule.
3.卫星程序集:
3.1创建资源文件:MyResource.cn.Resx 或者MyResource.cn.txt
3.2使用命令resgen MyResource.cn.resx MyResource.cn.resources 编译资源
3.3 al.exe /culture:cn /out:"cn/HelloWorld.Resources.dll" /embed:"MyResources.cn.resources" /template:"HelloWorld.exe"
3.4在主程序集HelloWorld中如何访问卫星程序集:
System.Resources.ResourceManager resources =
new System.Resources.ResourceManager("HelloWorld.Resources.MyResources",
System.Reflection.Assembly.GetExecutingAssembly());
// Print out the "HelloWorld" resource string
Console.WriteLine(resources.GetString("HelloWorld"));
// Get the new culture name
Console.Write(resources.GetString("NextCulture"));
3.5部署主程序集和卫星程序集
│ HelloWorld.exe
├─ko-kr
│ HelloWorld.resources.dll
├─it
│ HelloWorld.resources.dll
├─fr
│ HelloWorld.resources.dll
├─es
│ HelloWorld.resources.dll
├─en
│ HelloWorld.resources.dll
├─en-us
│ HelloWorld.resources.dll
└─de
HelloWorld.resources.dll
通过AL工具来改变一个程序集的各种属性:
可以参见AL的帮助
通过AssemblyInfo.cs文件来改变一个程序集的属性:
这个文件中最重要的几个特性是:
1、AssemblyVersion: 格式: Major Version ---- Minor Version ------ Build version ------ Revision
2、[assembly: AssemblyCulture("")]
3、[assembly: AssemblyDelaySign(false)]
4、[assembly: AssemblyKeyFile("")]
5、[assembly: AssemblyKeyName("")]
这几个各个程序集属性的探讨
将程序集组成各种应用程序,进行程序集的部署:
不考虑应用程序的类型,可以将程序集的部署分为私有部署和全局部署。
私有部署:
1.本地应用程序的部署结构
AppDir
|---- App.exe
|---- App.exe.config
|-----AuxFilesDir
|------ xxx.dll
|------ yyy.dll
在App.exe.config中可以配置影响CLR寻找程序集路径的选项。
2.Asp.net应用程序和XML Web服务应用程序
对于asp.net Web窗口和XMLWeb服务应用程序,配置文件必须位于Web应用程序的虚拟根目录下,并且名称总是Web.config 。另外子目录也可以包含它们自己的Web.config文件,并继承上一目录的配置设置。
3. 对于包含客户方空件、以微软的IE浏览器为宿主的程序集。(没有见过)