.Net魔法堂:AssemblyInfo.cs文件详解
一、前言
.net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件。但我们实际上通过另一个形式操作该文件。那就是通过在鼠标右键点击项目的属性进入“应用程序”->“程序集信息”,然后修改信息。
二、作用
通过特性(Attribute)来设置程序集(dll文件)的常规信息,供查看或作为配置信息供程序内部使用。
三、详解
// 程序集标题
[assembly:AssemblyTitle("程序集标题")]
// 程序集描述
[assembly:AssemblyDescription("程序集描述")]
// 产品名称
[assembly:AssemblyProduct("产品名称")]
// 公司
[assembly:AssemblyCompany("公司名称")]
// 合法商标
[assembly:AssemblyTrademark("合法商标")]
// 产品的内部名称
[assembly:AssemblyCulture("产品的内部名称")]
// 版权
[assembly:AssemblyCopyright("Copyright 2014")]
// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
[assembly:AssemblyVersion("1.0.0.0")]
// 控制程序集中所有类型对COM的可访问性
[assembly:ComVisible(false)]
// 配置文件,如零售、发布、调试等信息。程序集在运行时不会使用该信息
[assembly:AssemblyConfiguration("")]
对生成的dll文件右键点击属性,即可查看到上述信息。
assembly:
表示特性以程序集作为作用范围。
四、读取assembly特性
以读取 [assembly:AssemblyProduct("")]
为例子
Type t = typeof(Program);
AssemblyProductAttribute productAttr = t.Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), true)[0] as AssemblyProductAttribute;
Console.WriteLine(productAttr.Product);
五、注意点
1. [assembly:AssemblyProduct("")]
特性不限于在AssemblyInfo.cs文件中使用,而是可以在任何的.cs文件中使用。
2. 对于同一个特性,程序集中仅能设置一次,否则编译时将报错。
示例:
[assembly:AssemblyProduct("")]
namespace{
public class Demo{
}
}
六、总结
现在回头看《.Net魔法堂:log4net详解》当中的那句 [assembly:log4net.Config.XmlConfigurator(Watch=true)] 应该就清晰多了。其实就是配置log4net框架从哪里读配置文件而已,当然这句也可以写到AssemblyInfo.cs文件中统一管理咯!
七、参考
http://www.itwis.com/html/net/aspnet/20091211/7123.html
- 【Python学习笔记之三】lambda表达式用法小结
- Selenium2+python自动化58-读取Excel数据(xlrd)
- 软件测试金字塔
- Selenium2+python自动化59-数据驱动(ddt)
- 浅谈我对动态规划的一点理解---大家准备好小板凳,我要开始吹牛皮了~~~
- Selenium2+python自动化60-异常后截图(screenshot)
- Cisco Packet Tracer 6.0 实验笔记
- kali 2018.1安装教程
- python接口自动化2-发送post请求
- TypeScript 动态创建类
- Java学习笔记【持续更新】
- 互联网协议入门(二)
- 设计模式六大原则(4):接口隔离原则
- 设计模式六大原则(3):依赖倒置原则
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3分钟短文:Laravel 编程中优雅地添加定义常量
- 极客算法训练笔记(四),栈和队列,从实际应用看数据结构
- 微博爬虫出错居然还和网络运营商有关
- 8.深入k8s:资源控制Qos和eviction及其源码分析
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
- CNN不用乘法? AdderNet和DeepShift论文理解
- 动手构建地铁关系网,实现最短路径查询
- Java并发编程(08):Executor线程池框架
- 用Scipy求解单个正态总体的置信区间
- 架构设计 | 基于电商交易流程,图解TCC事务分段提交
- 用Gaussian做CASSCF计算
- 用Gaussian 16计算振动分辨的紫外-可见吸收光谱
- graylog日志分析系统上手教程
- 使用Seq搭建免费的日志服务
- 拜托!这才是分布式系统CAP的正确打开方式!