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

NET程序集03

2018年02月07日 ⁄ 综合 ⁄ 共 2163字 ⁄ 字号 评论关闭

【文章标题】: NET程序集03
【文章作者】: 有酒醉
【作者邮箱】: wuqr32@sina.com
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
三、查找程序集

对程序集进行搜索,需要分为3个时间段,并且每个时间段都有不同的规则:

编译时间 - 编译器对其正在编译的代码所引用的程序集进行搜索
添加项目引用时间 - NET会找出在它的Add Reference对话框中显示了哪一个程序集
加载时间 - 当一个程序集运行时,CLR需要定位并加载其他被引用的程序集

1、编译器查找程序集的原理

csc /r:MyControl.dll /r:MyOtherControl.dll MyProgram.cs

编译器查找MyControl.dll,MyOtherControl.dll的路径为:
a、工作目录
b、CLR系统目录
c、csc命令中使用/lib标记的目录
d、LIB环境变量指定的文件夹

2、NET添加项目引用查找程序集的原理

a、NET Framework 的安装文件夹
b、在两个注册表键以及子键中查找:
   HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/7.0/AssemblyFolders
   HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/AssemblyFolders

注意,.NETFramework/AssemblyFolders注册表键似乎是供第三方软件使用的,而VS.NET则使用专用的VisualStudio/7.0/AssemblyFolders
同时注意,当编译代码时,VS.NET都会将引用的文件复制到工作目录中.但是,从CLR系统文件夹中引用的任何程序集除外

3、CLR探查程序集的原理

a、应用程序文件夹
b、如果程序集包含强名,那么CLR将在GAC和应用程序文件夹中进行搜索
c、mscorlib.dll始终从CLR系统文件中加载
d、附属程序集使用单独的规则

使用mscorcfg.msc可以重新配置程序集的探测规则

四、生成程序集

1、程序集实用程序

al.exe - 程序集链接程序.包括多个资源文件以及代码或密钥链接在一起,形成一个程序集
gacutil.exe - 在全局缓存区中安装或卸载程序集
resgen.exe - 将基于文本的文件中的资源编译为在程序集中使用的二进制格式.
resxgen.exe - 将图象文件转换为resgen可以处理的基于XML的文本文件
sn.exe - 生成公钥和私钥,al.exe使用该公钥/私钥组合来标识程序集

2、编译资源文件

.txt文件 -- 名-值对应的格式.

示例1 - .txt资源文件

FileMenu = File
FileMenuSave = Save
FileMenuOpen = Open

F:/>resgen test.txt

从“test.txt”读入 3 资源
正在写入资源文件...  完成。

.resx文件 -- 实际上是XML文件,它遵循了一个相当严格的模式.resx文件可以表示任何类型的资源.

示例2 - 将图象转换为.resx

cmd > cd /Microsoft Visual Studio NET 2003/SDK/v1.1/Samples/Tutorials/resourcesandlocalization/resxgen
cmd > build.bat
cmd > resxgen /i:china2.jpg /o:china.resx /n:china

示例3 - 将.resx转换为resources文件

cmd > resgen china.resx

3、本地化及附属程序集

对于每一个本地化版本来说,在包含了主程序集的文件夹下都有一个子文件夹,子文件夹的名称与相应的文化字符串一致.在每个文件夹中
还有一个程序集,也就是附属程序集.附属程序集具有和主程序一样的基础名称.(但以.resources.dll结尾)

附属程序集应当只包含资源,而不包含代码.

示例4 - 创建仅包含资源的附属程序集

al /win32res:MyResource.resources /c:de /out:MyLibrary.resources.dll

4、为程序集签名

示例5 - 生成程序集密钥

sn -k ourkey.snk

示例6 - 对程序集进行签名

al /win32res:MyResources.resources /c:de /keyfile:ourkey.snk /out:MyLibrary.resources.dll

示例7 - 源代码中应用

[assembly:AssemblyKeyFile("ourkey.snk")]

end.
 
--------------------------------------------------------------------------------
【版权声明】: 本文原创于泉州软件基地, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月28日 15:40:24

 

【上篇】
【下篇】

抱歉!评论已关闭.