1 NameSapce
1 1个namespace里面可以有多个类
2 namespace和cs文件是多对多的关系。
3 调用另一个namespace的声明,可以使用using <namespace> ,然后直接调用类名,或者使用namespace.类名来调用
4 namespace支持别名(alias) using namespace = namespace.classname,如using mycar = consoleapplciation1.car;
5 namespace支持嵌套
2 Assembly
1 Assembly 两种类型,exe 或dll, 两种类型都可以被其他程序调用,得到内部的Class Type.
2 .net 的Assembly具有语言无关性,c#的程序可以调用或者继承vb.net编写的DLL/exe assembly中的type
3 C#中的type是由namespace.type决定的,如果两个assembly(dll/exe),中包含有相同的namespace.type,那么c#认为两者相同
4 Assembly有一个4位数的版本号 <major>.<minor>.<build>.<revision>
5 C#中的Assembly使用manifest文件以及自身来描述自身调用的其他Assembly,版本号以及内部包含的Type,Class等。
6 Assembly的组成部分: Win32的文件头/CLR文件头/CIL code /type metadata/manifest/resource文件
3 单文件和多文件Assembly
多文件Assembly一般包括资源文件(如bmp),.netModule文件(包括type metadata和CIL Code),这些文件由主dll的manifest文件中指定说明
4 Private Assembly
和application在同一个目录或者子目录下,如果在exe中指定了reference,则在第一次编译时,会将对应的dll拷贝到exe目录中,执行exe文件时,exe会从拷贝的dll中得到type.主要是c#中是不会通过注册表得到指定的dll.
Private Assembly的唯一标志为文件名+版本号
5 exe的configure文件 exe.config
1 如private assembly位于exe所在目录的子目录,则需要在config文件中指定目录名,如
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="MyLibraries"/>
</assemblyBinding>
</runtime>
</configuration>
如果是多个目录,则可以写为<probing privatePath="MyLibraries; MyLibraries/Tests"/>
6 Shared Assembly
同private的区别就是compile不会拷贝一个shared assembly的副本,和exe的对应关系是1对多,一般位于目录c:/windows/assembly。 Shared Assembly的唯一标志称为strong name.由public key和private key以及其他部分组成。
sn.exe程序可以帮助生产Public key和private key,public key被储藏在manifest中,而Private key和Assembly的hashcode会组合成一个digital签名,存放在assembly中
所以strong name = assembly name + public key + version number + culture identity(多语言使用,optional) + digital签名
7 Configure文件中关于shared assembly的设置
[assembly: AssemblyVersion("2.0.0.0")],
动态绑定assembly
1 如果程序想加载一个与manifest中指定版本不同的assembly,通过assemblyIdentity(名称)和 bindingRedirect(当前使用版本及新需要加载的版本)下例
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
514 CHAPTER 15 n INTRODUCING .NET ASSEMBLIES
<assemblyIdentity name="CarLibrary"
publicKeyToken="219ef380c9348a38"
culture="neutral"/>
<bindingRedirect oldVersion= "1.0.0.0"
newVersion= "2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
2 config文件中的<codeBase>
帮助exe在指定的location加载assembly
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name=" CarLibrary" publicKeyToken="219ef380c9348a38" />
<codeBase version="2.0.0.0" href="file:///C:/MyAsms/CarLibrary.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
3 config中的自定义tag
System.Configuration.AppSettingsReader支持读取config文件中的客户化配置
tag名为<AppSettings>, <add key。。>
4 机器级的config文件,版本不同,地址不同。文件名: machine.config
位于C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG目录
转自:http://blog.csdn.net/dianxer/article/details/5076667