AssemblyInfo.cs的做用

2019年12月19日 阅读数:24
这篇文章主要向大家介绍AssemblyInfo.cs的做用,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

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

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

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提供的工具保证了你分发组件的完整性。所以我强烈建议你使用这些工具,经过这些工具来使得计算世界变得更安全一点。 web