频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

.net纵横谈(一)

来源: 作者: 出处:巧巧读书 2006-10-17 进入讨论组

  好久没在这贴原创的帖子了,尤其是用中文:)这次本来是想和bigeagle探讨一下CLR的,但是,等到动笔时我又改变了主意,主题更为广泛,包括ASP.Net,XML,CLR和IL也许还有Web Service,呵呵,其原因有二:一是CLR这个话题太枯燥,很多朋友没有兴趣,
没人理睬的文章我也没有写下去的动力;二是我想我写的越多,暴露的缺点也越多,可以从大家那里获得很多指点,我会获益匪浅(有点自私啊:))。这次计划写很长,我自己也没什么把握,呵呵。
言归正传
第一章Assemblies
sigh,也是很没劲的话题,你可能会想。但也许你咬着牙读完的时候,会发现它其实很有趣。OK,Let’s begin。CLR(Common Language Runtime)要求所有的类型都要归属于一个Assembly。Assemblies在.Net Framework中的角色是组件代码的最小可分发单位。一些关于Assemblies的要点
l         Assemblies是类型定义的集合
l         类型名是由它所处的Assembly检查的
l         只有标记为public的类型和成员才能在Assembly的外部可见
l         标记为internal的成员和类型在Assembly的外部不能访问
l         标记为private的成员在声明它们的类型的外部是不可见的
1.1
Assemblies和modules
一个Assembly包含一个或多个物理文件(modules),module是一个包括代码和metadata的可执行文件,每个module都可能是用不同的语言生成的,在一个Assembly里一个module包含一份Assembly manifest。Csc.exe /t:module和/addmodule开关支持module级的编译和引用。默认的情况下,csc.exe /t:module生成的文件会有一个.netmodule的扩展名。这时,它是不包含manifest的,这种文件是不能被CLR加载的。然而这样的文件却可以通过/addmodule开关整合到assembly manifest中。而al.exe可以连接(link)多个module并创建manifest。
/t:module                                                 

.module test.netmodule

.assembly extern mscorlib
.assembly extern Michael

.class public PP{
.field [michael]Bassist wangpeng
}

/t:library

.module test.dll

.assembly extern mscorlib
.assembly extern Michael

.class public PP{
.field [michael]Bassist wangpeng
}

.assembly test(manifest)


再举一个multi-module assembly的例子

/t:library /addmodule:winform.netmodule, webservice.netmodule

.module forum.dll

.assembly extern mscorlib
.assembly extern Joy
.assembly extern Bigeagle

.class public Master{}

.assembly forum(由此向下是manifest并注意下两个表格与它的关系)

.file winform.netmodule
.file webservice.netmodule

.class extern public WS{
.file webservice.netmodule
.class nnnn
}
.class extern public WF{
.file winform.netmodule
.class nnnn
}

/t:module

.module webservice.netmodule

.assembly extern mscorlib
.assembly extern Bigeagle

.class extern public WS{
.field [Bigeagle] Bassist m
}

/t:module

.module winform.netmodule

.assembly extern mscorlib
.assembly extern Joy

.class extern public WF{
.field [Joy] Singer m
}

Code.cs→csc.exe /t:module→code.netmodule
Component.cs→cscs.exe /t:library /addmodule:code.netmodule→component.dll

Component Assembly

code.netmodule

component.dll


Application.cs→csc /r:component.dll→application.exe(Application Assembly)

1.2Public Keys and Assemblies
Assemblies用Public Keys技术来识别开发者和防止破坏
要点:
1.             加密的签名是基于public/private钥对的。
2.             没有重新签名是无法更改assembly的。
3.             在生成的Assemblies中包含1024bit的RSA public key
4.             引用Assemblies的文件包含64bit的public key的hash
5.             Sn.exe用来管理public/private key文件
6.             AssemblyKeyFile和AssemblyDelaySign属性将Assemblies和keys联系起来
用sn.exe管理public/private key文件
sn.exe -k publicprivate.snk
        
publicprivate.snk  Public Ke(128 bytes + 32byte header) Private Key (436 bytes)
           ↓
sn.exe -p publicprivate.snk public.snk
        ↓
public.snk  Public Key(128 bytes + 32byte header)
       
sn.exe -t public.snk
        ↓
Public key token is 883dd0182e81d815

Strong Assembly References
Mylib.cs [TABLE align=left]
using System.Reflection;
[assembly: AssemblyKeyFile("publicprivate.snk")]
[assembly: AssemblyDelaySign(false)][/TABLE]
                        ↓

Public Key(128 bytes + 32byte header)

Private Key (436 bytes)

publicprivate.snk

        ←csc /t:library mylib.cs
                                          ↓
mylib.dll               ↓

PE/COFF Header

CLR Header

Public Key(128 bytes + 32byte header)

Signature


Code

                        ↑
myapp.exe               ↑

PE/COFF Header

CLR Header

mylib

Public Key Token(8 bytes)
http://www.qqread.com/dotnet/u221275.html 更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选