总结:用来设置项目生成的dll的常规信息。(如版本、版权等等)它就相当于一个资源文件,存放资源信息。

http://www.cnblogs.com/xuyuantao/articles/927285.html

AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数请看以下具体说明: 
//备注: 
[assembly:AssemblyDescription("用最强的抢劫类写成!")] 
//产品名称 
[assembly:AssemblyProduct("产品名称 ")] 
//公司 
[assembly:AssemblyCompany("公司")]
//合法商标 
[assembly:AssemblyTrademark("合法商标")];
//内部名称 
[assembly:AssemblyCulture("")]
//设计者 
[assembly:AssemblyDescription("设计者 ")] 
//版权 
[assembly:AssemblyCopyright("版权")] 
//配置文件 
[assembly:AssemblyConfiguration("Configuration")] 
//产品版品: 可指定,如下 
// 程序集的版本信息由下列 4 个值组成: // 
// 主版本 
// 次版本 
// 内部版本号 
// 修订号 // 
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按 
// 如下所示使用 '*': [assembly:AssemblyVersion("1.0.*")] 生成dll文件以后再点击右键看看它的属性,你就为在里面看到熟悉的内容了.

如果你使用.NET作为开发工具很长时间了,你肯定回会碰到“强名”(strong name)这个概念。这个概念并不意味你的组件命名方式必须类似于MyCompany.Gorilla.Biceps的方式。强名的力量体现在对组件的保护方面,.NET Framework使用强名来标识组件和保护组件使其免遭破坏。在这篇文章中我将说明如何建立强名,以及在.NET中使用强名的技巧。

1. 散列和签名 为了了解强名的工作原理,你必须首先理解密码学方面的两个概念:散列(hashing)和数字签名(digital signatures)。散列是用来为明文(plaintext)信息创建一个唯一的压缩的值。这里的“信息”是一个很广泛的概念,对于组件来说,信息就是它本身。如图1所示,信息作为散列作为散列算法的输入而被处理,对于强名情况,采用SHA1算法。

散列是不可逆的,一旦计算出来,是不可能解密的。但是,散列在比较值方面是非常有用的。如果两个组件生成同样的散列值,你可以认为这两个组件是相同的。相反,通过散列计算出来的值和以前计算的值不一样,说明组件中某个地方被修改了。 因此通过散列值你就可以知道,组件是否被修改或破坏。然而你怎样通过散列值来防止别人对你的组件的修改呢?下面就是我要讲的“数字签名”。 虽然数字签名的具体数学原理很复杂,但是概念很简单。一个数字签名依赖于两个相关的数字:公共秘匙(public key)和私有密匙(private key)。如图2所示,当数据通过公共秘匙加密后,它只能通过私有密匙来解密,反之亦然。

2. 组件的强名 在.NET中共同使用散列和数字签名就能够保护你的组件免遭破坏。其原理如图3所示,首先从组件产生一个散列值,然后这个散列值通过你的私有密匙被加密,然后这个散列值和公共密匙被一起防止在组件中。 
在运行的时候,公共语言运行时(CLR)通过比较散列值验证组件。首先公共的密匙用来解密散列,从当前的组件中计算出一个新的散列。如果它和原来的值吻合,那就通过了验证
那么如果一个组件在签名之后被破坏将会发生什么样的情况呢?显然,在运行时从组件中计算出来的散列值将不会与存储在组件中通过私有密匙加密的散列值吻合,这样公共语言运行时将拒绝加载该组件。

注意强名只是保证了组件的完整性,而并非它的安全性,没有什么办法来防止某个人创建一个恶意的组件,并通过强名来给它签名。你可以通过强名来验证某个组件在签名后是否被破坏。基于你对于信息的选择。这一切将由你来决定是否相信从某个地方来的组件和代码信息。

3.强名的其它信息

除了从组件内容求出来的散列,强名还包含一下三个方面的信息。

l 组件简单文本名称

l 组件版本号

l 组件的语言文化代码

所有的这些信息,将为每个组件提供唯一的标识。有了这些信息,公共语言运行时可以决定一个组件是否被另一个组件通过引用的方式调用。当你从一个组件引用另一个组件,该组件将存储被调用组件的公共密匙。在运行的时候,公共语言运行时将通过这些来判断该组件是否来自正确的供应商。另外强名中的其它信息用来判断组件是否符合引用的绑定策略(binding policy)的要求。

4.使用强名的技巧

.NET Framwork SDK和 Visual Studio.NET为指定强名提供了很多的工具,这是很有意义的,因为通过Visual Studio.NET来创建组件具有更多的选择。在你签名之前你必须创建一对密匙(公共密匙和私有密匙),通常密匙对放置在以.snk结尾的文件中。可以通过强名工具sn.exe来实现。

sn -k MyKeyFile.snk 
如果你使用命令行编译器(vbc.exe或者csc.exe),你就可以为组件连接器al.exe,指定密匙对。如下面的命令行所示,你可以将存储在MyKeyFile.snk中的密匙对作为MyFile.dll的签名。

al /out:MyFile.dll MyFile.netmodule /keyfile:MyKeyFile.snk 
如果你使用Visual Studio .NET,你仍然可以通过命令行的方式产生你的密匙对。有了密匙对之后你就可以通过设定在组件信息文件(AssemblyInfo.vb 或者semblyInfo.cs)的【AssemblyKeyFile】属性来把它包含到组件中。例如C#工程,你可以通过该属性包含密匙文件而生成一个签名组件。

[assembly: AssemblyKeyFile("..\\..\\MyKeyFile.snk")]

从被编译的组件到密匙文件,【AssemblyKeyFile】属性中的文件名必须包含完整的相对路径。

5.通过延迟签名加密

保护你的私有密匙是非常重要的,如果某个恶意的人取得了你的密匙,他生成的组件将和你签过名的组件一样。因此,应当把你的密匙设于高度的保密状态,公司里面可能就只有几个人知道。这样以来,又怎么给你的组件签名呢?如果就只有你一个人知道密匙,这样会很繁琐,因为你必须为公司中每个开发者开发出来的每个组件签名。

很幸运的是.NET为这个问题提供了一个很好的方法:延迟签名。通过延迟签名,你可以在只知道公共密匙的情况下创建和测试组件。只有在组件实际分发给用户时才将私有密钥匙包含到组件。下面是使用延迟签名过程的一些技巧总结:

1. 从公共/私有密钥匙对中提取公共密匙。为了提取公共密匙,也就是存储公共/私有密匙对,你可以使用强名工具,命令行如下:

sn.exe -p MyKeyFile.snk MyPublicKeyFile.snk

2. 将包含公共密匙的文件分发给公司所有的开发者,同时将包含公共/私有密钥匙对的文件安全存放。

3. 在组件信息文件中包含公共密匙的文件,并注明延迟签名。

[assembly: AssemblyDelaySign(true)] 
[assembly: AssemblyKeyFile("..\\..\\MyPublicKeyFile.snk")] 
如果你使用组件连接工具,而非Visual Studio .NET,你可以使用/delaysign命令行来表明延迟签名。

4. 如果你把组件保存在全局程序集缓存(GAC)中,应关闭对组件的验证,因为GAC默认验证每个组件的强名。如果组件没有采用私有密钥匙来签名,这个验证将会失败。因此,出于开发和测试的目的你可以输入如下的命名行:

sn.exe -Vr MyFile.dll

5. 这样,你就可以在开发和测试的时候很自由的使用组件

6. 当部署一个延迟签名的组件的时候,你必须通过私有密匙来给它签名。

sn.exe -R MyFile.dll MyKeyFile.snk

7. 最后,你必须通知GAC重新开启对组件的验证。命名行如下:

sn.exe -Vu MyFile.dll 
6.可信任计算(TrsutWorthy Computing)

你肯定听说过微软的“可信任计算”措施,它包含了有关微软产品的很多安全方面的措施。微软正慢慢的而且必然的朝着一个方向发展,那就是他们将使他们所有的软件产品是默认安全的。如果你知道你在做什么,你就可以降低软件(如Windows Server 2003)的安全级别。虽然降低了安全级别,但太可能使你受到突发事件的攻击。

当你给你的组件赋予强名,你在做就是“可信任计算”。通过强名来分发你的组件,会使得组件不太可能成为木马和其他攻击计算机黑客程序的载体。.NET Framework和Visual Studio .NET提供的工具保证了你分发组件的完整性。因此我强烈建议你使用这些工具,通过这些工具来使得计算世界变得更安全一点。

AssemblyInfo.cs的作用的更多相关文章

  1. AssemblyInfo.cs文件的作用

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些參数,以下是默认的AssemblyInfo.cs文件的内容详细介绍 //是否符合公共 ...

  2. .Net魔法堂:AssemblyInfo.cs文件详解

    一.前言 .net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我们实际上通过另一个形式操作该文件.那就是通过在鼠标右键点 ...

  3. AssemblyInfo.cs文件参数具体讲解

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共 ...

  4. [0] AssemblyInfo.cs文件介绍

    AssemblyInfo.cs文件:包含程序版本.信息.版权的属性文件 先介绍AssemblyInfo.cs文件中的程序集属性 内容: using System.Reflection;using Sy ...

  5. WinForm中AssemblyInfo.cs文件参数具体讲解

    在.NET中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共语言规 ...

  6. AssemblyInfo.cs文件详解

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq395537505/article/details/49661555 一.前言 .net工程的Pr ...

  7. c#程序中的AssemblyInfo.cs

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共 ...

  8. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  9. 修改AssemblyInfo.cs自动生成版本号

    一. 版本号自动生成方法 1.把 AssemblyInfo.cs文件中的[assembly:AssemblyVersion("1.0.0.0")]改成[assembly:Assem ...

随机推荐

  1. 一个.net mvc的例子

    控制器 ( Controller) Product 下面功能主要根据多条件搜索产品的列表的功能 public ActionResult ProductList(string cityID, strin ...

  2. JDE910笔记1--基础介绍及配置[转]

    1.一般JDE部署后环境: DV:开发环境 PY:测试环境 PD:正式环境 根据端口号区分不同环境,可配置.同时,JDE默认使用分发服务器,不同环境连接为不同的数据库. 2.命名规范: 自定义项目.函 ...

  3. C#入门篇6-5:字符串操作 测试StringBuilder的运行效率

    //测试StringBuilder的运行效率 public static void Fun2() { #region string string str = "我喜欢编程!"; / ...

  4. freemarker实例2

    下面演示一个简单的使用项目过程:1. 使用myeclipse创建一个web项目testFM2. 把下载到的jar包(freemarker-2.3.9.jar)放到/WebRoot/WEB-INF/li ...

  5. 构建之法<第四章>之感悟

    第四章:两人合作内容出处:4.6 两人合作的不同阶段和技巧 本章主要是讲关于合作方面的,文章以刚刚认识的两个人为例!也就是说,他们之前的关系是陌生人,然而在现实当中两人合作也可以有其它的关系,比如说合 ...

  6. 带你揭开ATM的神秘面纱

    相信大家都用过ATM取过money吧,但是有多少人真正是了解ATM的呢?相信除了ATM从业者外了解的人寥寥无几吧,鄙人作为一个从事ATM软件开发的伪专业人士就站在我的角度为大家揭开ATM的神秘面纱吧. ...

  7. PHP IMAP收QQ邮件,SMTP存入另外QQ邮箱

    作用,将qq1收到邮件,用qq2的账号.以qq0的为发件人身份放到qq2的邮箱. 什么样做这样一个功能,一个朋友要求的,她不告诉我为什么,好吧 <?php define('USER','xxx@ ...

  8. Phonegap hello world 不容易啊~!

    今天一个项目要用phonegap,当初就是觉得phonegap配置太tmd的麻烦了,所以转头appcan,但今天项目必须用-- 先是看到官方说用nodejs装,tmd的,总是重复同一个错误,安装不起, ...

  9. 二模 (10) day2

    第一题: 题目大意:求出区间 [L,R]里约数最多的数.   L,R<=10^9 解题过程: 1.一开始我就往恶心的数据去想了,比如 L=R=一个超级大的质数.. 那么 用搜索质因子的方法  是 ...

  10. [转载]查看基于Android 系统单个进程内存、CPU使用情况的几种方法

    转载自: http://www.linuxidc.com/Linux/2011-11/47587.htm 一.利用Android API函数查看1.1 ActivityManager查看可用内存. A ...