参考:http://blog.sina.com.cn/s/blog_7ade159d0102wmg9.html

  • 程序集(Assembly,装配件,.NET程序集)

    • 程序集是应用程序的部署单元,.NET应用程序包含一个或多个程序集。
    • 通常编译出来的dll、exe的.NET可执行程序都是程序集
    • .NET程序集包含元数据,这些元数据描述了程序集中定义的所有类型及其成员的信息,即方法、属性、事件和字段。
      • ildasm.exe这种反编译工具用到了?

    • 与命名空间比较
      • 程序集

        • 类库的物理组织形式
        • 通过右击reference添加引用来引入外部库
        • 目的:程序的物理组织,供CLR使用,这些exe、dll中包含一些程序集信息
      • 命名空间
        • 类库的逻辑组织形式
        • 通过using语句来引入外部库
        • 目的:避免产生类名冲突,人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象
      • 只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型。
      • 在一个程序集中可以有不同的命名空间,同一个命名空间也可以分布在多个程序集上。命名空间只是类型名的一种扩展,它属于类型名的范畴。
  • 每个project(如果是library,编译后生成一个对应的dll或exe)都会有一些程序集信息(显示在dll或exe的右击属性菜单中)
  • 作用:通过特性(Attribute)来设置程序集(dll文件)的常规信息,供查看或作为配置信息供程序内部使用。
  • 对应到VS的项目树中,每个project->Properties->AssemblyInfo.cs文件中都包含了对应的这些程序集信息(一些Attribute)
    • 这个名为AssemblyInfo.cs的文件是vs在.net工程的Properties文件夹下自动生成的,一般情况下我们很少直接改动该文件。
    • using System.Reflection;
      using System.Runtime.CompilerServices;
      using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following
      // set of attributes. Change these attribute values to modify the information
      // associated with an assembly.
      [assembly: AssemblyTitle("TestWinform")]
      [assembly: AssemblyDescription("")]
      [assembly: AssemblyConfiguration("")]
      [assembly: AssemblyCompany("Licence Owner")]
      [assembly: AssemblyProduct("TestWinform")]
      [assembly: AssemblyCopyright("Copyright © Licence Owner 2018")]
      [assembly: AssemblyTrademark("")]
      [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible
      // to COM components. If you need to access a type in this assembly from
      // COM, set the ComVisible attribute to true on that type.
      [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM
      [assembly: Guid("1d2f88e5-afc7-468d-a71b-078e27edf595")] // Version information for an assembly consists of the following four values:
      //
      // Major Version
      // Minor Version
      // Build Number
      // Revision
      //
      // You can specify all the values or you can default the Build and Revision Numbers
      // by using the '*' as shown below:
      // [assembly: AssemblyVersion("1.0.*")]
      [assembly: AssemblyVersion("1.0.0.0")]
      [assembly: AssemblyFileVersion("1.0.0.0")]
  • 我们实际上通过另一个形式操作该AssemblyInfo.cs文件。那就是通过在鼠标右键点击项目的属性进入“应用程序”->“程序集信息”,然后修改信息。
  • 程序中如何读取assembly特性
    • Type t = typeof(Program);

      AssemblyProductAttribute productAttr = t.Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), true)[0] as AssemblyProductAttribute;

      Console.WriteLine(productAttr.Product);

  • 注意
    • [assembly:AssemblyProduct("")] 特性不限于在AssemblyInfo.cs文件中使用,而是可以在任何的.cs文件中使用。
    • 对于同一个特性,程序集中仅能设置一次,否则编译时将报错。
  • 举例
    • [assembly:log4net.Config.XmlConfigurator(Watch=true)] 其实就是配置log4net框架从哪里读配置文件而已,当然这句也可以写到AssemblyInfo.cs文件中统一管理。

.NET中的程序集的更多相关文章

  1. CLR中的程序集加载

    CLR中的程序集加载 本次来讨论一下基于.net平台的CLR中的程序集加载的机制: [注:由于.net已经开源,可利用vs2015查看c#源码的具体实现] 在运行时,JIT编译器利用程序集的TypeR ...

  2. ASP.NET Web Froms开发模式中实现程序集的延迟加载

    延迟加载是一个很大的诱惑,可以达到一些比较好的效果,比如: 1.在实体框架中,由于关联数据的数量和使用时机是不确定的,通过延迟加载,仅在使用的时候去执行关联数据的查询操作,减少无谓的数据查询操作,可以 ...

  3. 【笔试&面试】C#中的程序集

    1.      C#中的程序集(Assembly) 答:程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分离可重用类型的逻辑表示和物理表示. 程序集是一个可重用.可实施版本策略和安全策略 ...

  4. 在Win7中安装程序集到GAC

    原文:在Win7中安装程序集到GAC 微软为提高系统安全,自Vista推出后,在Windows系统中加入了一个新的东东——UAC(User Account Control),这样一个新的技术使得许多操 ...

  5. Net中获取程序集路径

      从内存中加载的程序集,无路径   IIS中路径 protected void Page_Load(object sender, EventArgs e) { Response.Write(&quo ...

  6. C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入

    C# 嵌入dll   在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...

  7. C# 获取文件路径,读取项目中某程序集下文件

    获取文件路径 ------------------------------------------------------------------------- winform获取文件路径: stri ...

  8. C#.NET中的程序集版本

    更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年8月22日. 在Visual Studio中查看程序集版本 在程序运行中获得程序集版本信息 除了在Visual ...

  9. C#中获取程序集版本号的方法

    我的方法: string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();   方法一: public v ...

  10. .NET中的程序集(Assembly)

    在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意 ...

随机推荐

  1. java实例三维空间求点之间的距离。。。。

    package com.b; public class Ponit { private double x; private double y; private double z; public Pon ...

  2. PTA 是否同一棵二叉搜索树(25 分)

    是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始 ...

  3. python中对 函数 闭包 的理解

    最近学到 函数 闭包的时候,似懂非懂.迷迷糊糊的样子,很是头疼,今天就特意查了下关于闭包的知识,现将我自己的理解分享如下! 一.python 闭包定义 首先,关于闭包,百度百科是这样解释的: 闭包是指 ...

  4. 虚拟机在 OpenStack 里没有共享存储条件下的在线迁移

    虚拟机在 OpenStack 里没有共享存储条件下的在线迁移 本文尝试回答与 Live migration 相关的几个问题:Live migration 是什么?为什么要做 Live migratio ...

  5. Oracle11gr2_ADG管理之跳归档恢复dg实战

    模拟故障 关闭备库 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut dow ...

  6. Mycat实战之主键数据库自增方式

    创建一个 person表,主键为Id,hash方式分片,主键自增(采用数据库方式) #person表结构如下 Id,主键,Mycat自增主键 name,字符串,16字节最长 school,毕业学校,数 ...

  7. KinderEditor编辑器 在Asp.Net中的使用

    KinderEditor编辑器的使用 分为简单的三步. 1:添加引用部分 <script src="/KinderEditor/kindeditor-min.js">& ...

  8. Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart)

    在接触WebService时值得收藏的一篇文章: 在调试Axis1.4访问WebService服务时,出现以下错误: Unable to find required classes (javax.ac ...

  9. java之飞机大战的记分标准

    import java.awt.Image; import java.util.ArrayList; import java.util.Timer; import javax.swing.ImageI ...

  10. linux su su -

    本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行, ...