一个程序集通常包括4个自定义属性,用来惟一识别程序集,它们是文件名(无扩展名)、版本号、区域性标识和公钥标记,比如:
"Hello, version=1.0.0.0, culture=neutral, publicKeyToken=9ebd24cc40ff21fd"
其中publicKeyToken是公钥的64位散列值,可以唯一标识程序集,拥有公钥标记的程序集称为强名称程序集,强名称程序集可以防篡改;可以安装到GAC中,为多个程序集所共享;还可以实施版本策略(不同版本的强名称程序集被认为是不同的程序集)。而公钥标记为空的程序集只能存在于所引用的程序集的目录以及子目录中,也无法实施版本策略(引用它的程序集会忽略版本号)。
公钥可以通过.NET SDK提供的SN.exe命令生成,生成方法是:
SN.exe -k Zhang.snk
这样就得到一个名为Zhang.snk的公/私密钥对文件,将其放至某一目录下,比如G:/,然后就可以创建强名称程序集了,只需要在源代码中添加下面的自定义属性即可:
[assembly:AssemblyKeyFile(@"G:/Zhang.snk")]
下面是一个Hello.cs文件,是创建强名称程序集的示例
using System;
using System.Reflection;
[assembly:AssemblyVersion("1.0.0.0")] //程序集版本
[assembly:AssemblyCultureAttribute("")] // 区域(为空,表示语言中立)
[assembly:AssemblyKeyFile(@"G:/zhang.snk")] // 公私密钥对
namespace Zhang.Study
{
public class Hello
{
public Hello()
{
Console.WriteLine("Class Hello Version 1.0");
}
public void SayHello()
{
Console.WriteLine("Hello, C#!");
}
}
}
#Hello.rsp
/out:./bin/Hello.dll
/target:library
Hello.cs
#end
最后编译源代码:csc.exe Hello.rsp,就得到了一个强名称程序集Hello.dll,使用Reflector.exe打开这个程序集,可以看到这样的描述:name: Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9ebd24cc40ff21fd。
参考书籍:
《Microsoft .NET Framework 程序设计》 Jeffery Richter著 商丽媛译 清华大学出版社
《.NET本质论》 Don Box,Chris Sells 著 张晓坤译 中国电力出版社
《MSDN》
分享到:
相关推荐
### VS2003中设计强名称程序集并制作安装入GAC的MSI #### 知识点一:理解强名称程序集与GAC - **强名称程序集**:在.NET框架中,强名称程序集是一种带有唯一标识符的程序集。这种标识符包含了程序集的名称、版本号...
### 强名称引用非强名称程序集的方法 在.NET框架中,为了确保程序集的唯一性和安全性,引入了强名称的概念。一个具有强名称的程序集包含了一个公钥标记、版本号、文化信息等,这使得它能够在全局程序集缓存(GAC)...
本文旨在详细介绍强命名程序集的概念、重要性及其创建方法。 #### 一、强命名程序集定义 强命名程序集是一种在.NET框架中使用的程序集类型,其通过一种名为强命名(Strong Naming)的机制来标识。强命名程序集拥有...
3. **创建强名称程序集**:利用ILDASM( Intermediate Language Disassembler)反编译DLL,然后使用ILASM(Intermediate Language Assembler)重新编译并添加强名称。这个过程涉及以下步骤: - 使用`ildasm /output...
创建强名称需要一对公钥/私钥,公钥用于签署程序集,私钥则用于验证签名。开发者可以使用.NET SDK工具如`sn.exe`来生成和管理这些密钥。 查看程序集内容通常可以通过使用Visual Studio的对象浏览器或者.NET框架提供...
### 创建有强签名的程序集 #### 一、概述 强签名是一种用于验证程序集完整性的机制,确保程序集在发布后未被篡改,并且能够解决命名冲突问题。通过为程序集添加数字签名,可以确保任何试图修改该程序集的行为都会...
Sn.exe工具主要用于生成、导入、导出和验证这些密钥对,以便为.NET程序集创建强名称。 Sn.exe的常用命令包括: 1. `-k keyfile`:生成一个新的密钥对,并将其保存到指定的keyfile中。这个密钥对包含一个公钥和一个...
在.NET框架中,C#提供了一种强大的能力,即能够在运行时动态地创建程序集、类、属性和方法。这种技术通常被称为元编程或者反射,它允许开发者在代码执行过程中生成和修改代码,大大增强了软件的灵活性和可扩展性。在...
具体步骤包括生成强名称密钥、用密钥签名程序集、创建SQL Server LOGIN、赋予权限,最后注册签名的程序集。 总的来说,SQL2005程序集权限管理涉及用户授权、文件系统访问控制和代码安全级别设置。正确配置这些权限...
1. 创建`AssemblyBuilder`实例,这将定义程序集的名称、位置和权限。 2. 使用`AssemblyBuilder`创建`ModuleBuilder`,模块是程序集中的一个可加载单元。 3. 使用`ModuleBuilder`创建`TypeBuilder`,定义类的基本属性...
要实现一个获取程序集信息的`MarkupExtension`,我们需要创建一个类继承自`MarkupExtension`并实现`ProvideValue`方法。例如,我们可以创建一个名为`AssemblyInfoExtension`的类: ```csharp public class ...
`snremove`工具,正如其名,是一个用于移除.NET程序集强名称的工具。这个工具可能被开发者在特定场景下使用,例如在调试、测试或构建过程中的某些环节,需要暂时去掉程序集的强名称以便更容易地替换或修改。然而,这...
.NET框架中的DLL文件强命名(Strong Naming)是一个关键的安全特性,它允许开发人员为他们的程序集(Assembly)创建唯一的标识,以确保代码的完整性和防止恶意替换。强命名的程序集包含以下四个组件: 1. **唯一...
`Strong.Name.Helper.v1.7-whoknows` 是一个专门用于处理.NET程序集强名称的工具,其主要功能可能包括生成、查看或移除强名称。 1. **什么是强名称:** 强名称是.NET中的一种机制,通过为程序集赋予一个唯一的标识...
一旦我们有了`Assembly`对象,可以访问它的属性和方法,获取如程序集名称、版本、公钥、导出类型等信息。 接下来,我们关注类型(Type)。类型在C#中包括类、接口、数组、值类型、枚举和指针。获取`Type`对象的方法...
首先,让我们了解如何创建强签名的程序集。这需要一个强名称密钥文件(.snk),可以通过Visual Studio或其他工具如`sn.exe`(Strong Name Tool)生成。生成密钥文件后,在项目设置中指定该密钥,编译器将使用它为...
在IT行业中,程序集资源是.NET Framework中一个重要的概念,它是构建应用程序的基础组件。程序集包含可执行代码、元数据以及任何与之相关的资源,如字符串、图像或配置文件。这个压缩包“程序集资源测试”很可能是...
在.NET框架中,强名称(Strong Name)是一个用于唯一标识并验证程序集的组合,它包含版本信息、公钥和数字签名。这个概念对于确保软件的完整性和防止恶意篡改至关重要,尤其对于分发和重用组件时。本文将深入探讨强...
在.NET框架中,C#语言提供了强大的能力,允许开发者在内存中装载并运行程序或程序集,这在某些场景下非常有用,例如动态加载、测试、插件系统等。这个特性主要通过System.Reflection命名空间中的类来实现。下面将...
**jar程序集详解** 在Java开发中,JAR(Java Archive)文件是一种打包格式,用于收集多个类文件、相关的元数据以及资源文件,以便在Java平台上分发和运行。"jar程序集"这一概念,是Java应用程序或库的集合,它们被...