一. Microsoft.NET开发平台的体系机构

1.将源代码编译成托管模块

       托管模块是一个标准的 windows可移植可执行(PE)文件。该文件需要CLR才能执行,最终用户必须在字迹的机器上安装CLR。

  托管模块的组成部分:PE标头,CLR标头,元数据,中间语言IL代码。

  其中,元数据包含两种主要类型的表:描述在源代码中定义的类型和成员的表,描述源代码引用的类型和成员的表。其作用:

1) 元数据在编译时不需要头和库文件。编译器可直接同托管模块中读取元数据

2) 使用编辑器的intellisence功能分析元数据

2. 将托管模块组合为程序集

  程序集assembly是一个或多个托管模块或资源文件的逻辑分组。

3. 加载公共语言运行库CLR

  可以在System32目录下查找MSCoreEE.dll文件,来判断是否已经安装了.net框架。

4. 执行程序集代码

        JIT编译器将IL编译成CPU指令。

  CLR提供了一个在OS进程中执行多个托管应用程序的功能,称为AppDomain。

5. 公共语言规范CLS

        CLS定义了所有语言必须支持的最小特性集。

  在代码中,让编译器检查CLS兼容性

  [assembly:CLSCompliant(true)]

6. 非托管代码的互操作性     

        1) 托管代码可以调用DLL中的非托管函数,基于P/Invoke平台机制

   2)托管代码可以使用现有的COM组件

7. 打包部署     

        1)DLL地狱:当安装一个新的应用程序时,会发现它不知何故损坏了一个已安装的应用程序。

  仅仅用文件名区分程序集是不行的,因为两个可能重名,这样后安装的会覆盖掉前面安装的。必须使用强名称程序集。

   2) 若要让自己的程序集出现在 添加引用|.net选项卡中,可将下列子键添加到注册表中。

         HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/AssemblyFolders/MyLibName

        MyLibName是我创建的名称,使其指向程序集文件的目录路径/MyLibPath

          3)程序集版本资源信息

[assembly: AssemblyTitle("WinAppTest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("EKING")]
[assembly: AssemblyProduct("WinAppTest")]
[assembly: AssemblyCopyright("版权所有 (C) EKING 2006")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("c27c97d5-2f66-4137-8b39-842b0a4d99c1")]

     程序集版本号由四部分组成:主版本,次版本,内部版本号,修订版本号

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
 

            4)部署方式

      直接拷贝;生成msi文件;生成cab文件用于internet下载压缩文件

             5)控件配置管理

               Machine.config

               对可执行exe程序:配置文件.exe.config

               对web程序:根目录和子目录对应的配置文件Web.config

可以使用 管理工具->Microsoft.net 框架配置

 8.共享程序集,全局程序集缓存GAC

1) 强名称程序集

   包括4个自定义属性,用以唯一区别程序集:文件名(无扩展名),版本号,区域性标识,公钥标记。如:

 Mytypes,Version=1.3.6.1,Culture=neutral,PublicKeyToken=b77a5c561934e089

 Mytypes,Version=2.0.3.5,Culture=neutral,PublicKeyToken=b77a5c561934e089

 Mytypes,Version=1.3.6.1,Culture=neutral,PublicKeyToken=e03f5648ddfsdfsd59

      采用公钥/私钥技术来区分不同公司开发的具有相同自定义属性的程序,公钥标记是公钥64位的 hash 值。

  System.Reflection.AssemblyName类,可以方便的获取程序集名的不同部分。

       创建 强名称程序集的步骤:

       第一步,获取一个密钥: SN -k  Mytypes.keys

       第二步,应用到源代码中,签名清单:

    [assembly: AssemblyKeyFile("Mytypes.keys")]

2) 全局程序集缓存GAC

    GAC的目的是存放一个程序集的多个版本。

  只有希望程序集被其他许多程序共享时,才建议将程序集部署到GAC中。

  如果一个程序集要被多个应用程序访问,程序集必须被放到一个公共目录中,并且当检测到对程序集的引用时,CLR必须自动查找此目录。这个公用位置称为GAC,通常在目录C:/WINNT/assembly中。

   安装工具 GACUtil /i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值