zoukankan      html  css  js  c++  java
  • c# 的namespace以及assembly

    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

  • 相关阅读:
    字符编码
    python基础5
    python基础4
    python基础3
    python基础2
    一、计算机基础
    Django中间件
    Django Form表单组件
    django简介,安装,文件介绍,三板斧(render,HttpResponse,redirect)HTTP协议,用socket实现简单版web框架,用wsgiref,jinja2,pymysql实现Django运行流程
    css,浮动,清浮动,溢出overflow,定位,圆形,透明度,z-index
  • 原文地址:https://www.cnblogs.com/allenhua/p/3013451.html
Copyright © 2011-2022 走看看