C#程序集Assembly学习笔记

 

①什么是程序集?
可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.
嗯,这个确实简单了些,但我是这么理解的.详细:

http://17top.net/tuwen-program-csharp/text-sQULqGF$


②程序集和命名空间的区别?
一个程序集可以跨越n个命名空间,一个命名空间也可以包含n个程序集.(估计你该晕了)

如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式。只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型。(摘抄自《精通.NET核心技术--原来与架构》   电子工业出版社)

也就是说,你要创建一个类的实例,必须知道该类的  命名空间(这个一般都知道)+程序集(这个很容易被我们忽略,因为一般我们不需要引用外部的程序集,如果你用C#做过Excel文件的导入导出,就会知道必须添加一个Excel相关的程序集引用)

③怎样通过命令行创建程序集?
我对命令行向来反感,如果你想知道,look here:

http://17top.net/tuwen-program-csharp/text-sQULqgF$


④我怎么把项目和程序集联系起来理解?
一个项目对应一个程序集.项目名与程序集名相同(03版,05版乱七八糟,随机生成的程序集名).
一般的我们每创建一个.NET项目(ASP.NET(VS2005里没有),WinForm,类库,控制台等),IDE都会自动生成一个AssemblyInfo.cs的文件,打开看看(03版)

 
C#程序集Assembly学习笔记 1 using  System.Reflection;
C#程序集Assembly学习笔记 2
using  System.Runtime.CompilerServices;
C#程序集Assembly学习笔记 
3
C#程序集Assembly学习笔记 
4 //
C#程序集Assembly学习笔记
  5 //  有关程序集的常规信息是通过下列
C#程序集Assembly学习笔记
  6 //  属性集控制的。更改这些属性值可修改与程序集
C#程序集Assembly学习笔记
  7 //  关联的信息。
C#程序集Assembly学习笔记
  8 //
C#程序集Assembly学习笔记
  9 [assembly: AssemblyTitle( "" )]
C#程序集Assembly学习笔记
10 [assembly: AssemblyDescription( "" )]
C#程序集Assembly学习笔记
11 [assembly: AssemblyConfiguration( "" )]
C#程序集Assembly学习笔记
12 [assembly: AssemblyCompany( "" )]
C#程序集Assembly学习笔记
13 [assembly: AssemblyProduct( "" )]
C#程序集Assembly学习笔记
14 [assembly: AssemblyCopyright( "" )]
C#程序集Assembly学习笔记
15 [assembly: AssemblyTrademark( "" )]
C#程序集Assembly学习笔记
16 [assembly: AssemblyCulture( "" )]        
C#程序集Assembly学习笔记
17
C#程序集Assembly学习笔记
18 //
C#程序集Assembly学习笔记
19 //  程序集的版本信息由下列 4 个值组成:
C#程序集Assembly学习笔记
20 //
C#程序集Assembly学习笔记
21 //       主版本
C#程序集Assembly学习笔记
22 //       次版本 
C#程序集Assembly学习笔记
23 //       内部版本号
C#程序集Assembly学习笔记
24 //       修订号
C#程序集Assembly学习笔记
25 //
C#程序集Assembly学习笔记
26 //  您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
C#程序集Assembly学习笔记
27 //  如下所示使用 '*':
C#程序集Assembly学习笔记
28
C#程序集Assembly学习笔记
29 [assembly: AssemblyVersion( " 1.0.* " )]
C#程序集Assembly学习笔记
30
C#程序集Assembly学习笔记
31 //
C#程序集Assembly学习笔记
32 //  要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考 
C#程序集Assembly学习笔记
33 //  Microsoft .NET Framework 文档。
C#程序集Assembly学习笔记
34 //
C#程序集Assembly学习笔记
35 //  使用下面的属性控制用于签名的密钥。
C#程序集Assembly学习笔记
36 //
C#程序集Assembly学习笔记
37 //  注意:
C#程序集Assembly学习笔记
38 //    (*) 如果未指定密钥,则程序集不会被签名。
C#程序集Assembly学习笔记
39 //    (*) KeyName 是指已经安装在计算机上的
C#程序集Assembly学习笔记
40 //       加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
C#程序集Assembly学习笔记
41 //        密钥的文件。
C#程序集Assembly学习笔记
42 //    (*) 如果 KeyFile 和 KeyName 值都已指定,则 
C#程序集Assembly学习笔记
43 //        发生下列处理:
C#程序集Assembly学习笔记
44 //        (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
C#程序集Assembly学习笔记
45 //        (2) 如果 KeyName 不存在而 KeyFile 存在,则 
C#程序集Assembly学习笔记
46 //            KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
C#程序集Assembly学习笔记
47 //    (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
C#程序集Assembly学习笔记
48 //        在指定 KeyFile 时,KeyFile 的位置应该相对于
C#程序集Assembly学习笔记
49 //        项目输出目录,即
C#程序集Assembly学习笔记
50 //        %Project Directory%/obj/<configuration>。例如,如果 KeyFile 位于
C#程序集Assembly学习笔记
51 //        该项目目录,应将 AssemblyKeyFile 
C#程序集Assembly学习笔记
52 //        属性指定为 [assembly: AssemblyKeyFile("..//..//mykey.snk")]
C#程序集Assembly学习笔记
53 //    (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
C#程序集Assembly学习笔记
54 //        文档。
C#程序集Assembly学习笔记
55 //
C#程序集Assembly学习笔记
56 [assembly: AssemblyDelaySign( false )]
C#程序集Assembly学习笔记
57 [assembly: AssemblyKeyFile( "" )]
C#程序集Assembly学习笔记
58 [assembly: AssemblyKeyName( "" )]
C#程序集Assembly学习笔记
59
C#程序集Assembly学习笔记

汗,,[assembly: AssemblyTitle("")],,,,竟然程序集名是空的....不过你从该项目的文件夹里确实能翻出与项目名相同的.dll文件.估计如果你不在这条语句里赋值,IDE默认生成的程序集与项目名相同.大胆用吧.(可是,我不知道怎么用程序集?敬请期待下一篇:C#反射Reflection学习随笔_AX)

⑤自知,我的解决方案(包含0~n个项目)用到了什么程序集?
C#程序集Assembly学习笔记                  // 遍历访问当前应用程序域的程序集Assemble
C#程序集Assembly学习笔记
                 foreach  (Assembly assem  in  AppDomain.CurrentDomain.GetAssemblies())
C#程序集Assembly学习笔记C#程序集Assembly学习笔记                
{
C#程序集Assembly学习笔记                    
//反射当前程序集的信息
C#程序集Assembly学习笔记
                    Response.Write("Assembly:"+assem.FullName+"<br>");
C#程序集Assembly学习笔记                }


⑥我们苦苦寻觅的Assembly里面到底是什么东西?有什么值得我们去苦苦探究的?
其实在上面的AssemblyInfo.cs代码中,我们已经看出来一些东西,它里面包含该Assembly的名称/产品/描述/拷贝权..(鬼才关心)和版本号(这个很重要,但我觉得还是没什么太大的用处,是dll Hell 的克星,顺带说一句,同一Assembly名称的不同版本号的Assembly可同时运行),还有一个密钥的概念,共享程序集和部署用的,看了半天没看明白,就不误人子弟了. 
那Assembly的主要用处是:
ⅰ与反射Reflection结合起来用,动态创建你所需要的类!!
ⅱ与反射Reflection结合起来用,获得Assemble里类的信息
(据可靠的小道消息说Assembly里存的是一张包含元数据类名什么的表)

ⅲ使用别人已封装好的类.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值