使用强名称的步骤:
1、创建密匙文件(.snk文件),打开vs command,输入:sn.exe -k 密匙文件名称.snk
2、将密匙文件加入到工程中csc /t:library /keyfile:MyKey.snk MyType.cs
3、创建强名称程序集。两种方式:
1、我们可以在源文件中使用AssemblyKeyFileAttribute,
[assembly: AssemblyKeyFileAttribute("MyKey.snk")]
namespace PowerNameAssembly
{
/// <summary>
/// 强名称程序集
/// </summary>
public class TestClass
{
public void TestMethod()
{
namespace PowerNameAssembly
{
/// <summary>
/// 强名称程序集
/// </summary>
public class TestClass
{
public void TestMethod()
{
//TODO::
}
}
}
}
}
}
2、使用csc.exe, 建议使用命令行选项来代替此特性。所以此处使用csc.exe:
csc /t:library /keyfile:密匙文件名称.snk 要进行签名的文件.cs
运行后得到 MyType.dll ,我们可以显示其中包含的公钥标记,看是否和上面的相
sn -Tp MyType.dll
4、编译之后,公匙的内容你嵌入到了程序集,程序集内容经过散列编码后,再使用密匙签名,也嵌入到了程序集中,
note:
1、如果要查看密匙文件中的公匙内容(私匙不允许查看),输入:sn -tp 密匙文件名称.snk
2、提取公匙内容: sn -p 公匙文件名称.snk 密匙文件名称.snk
(二)GAC的使用,
GAC:全局程序集缓存,具有GAC的服务器必须安装公共语言运行库,GAC负责存储指定给计算机中应用程序共享的程序集,仅仅是在需要使用共享程序集时才会放置到GAC中。
将Assembly放置到GAC中四种方式:
1、使用Command,比较适合开发阶段使用:gacutil.exe /i Assembly名称.dll
2、使用Windows installer去发布到GAC中,比较适合部署阶段使用。
3、使用NET Framework 配置工具 (Mscorcfg.msc)。具体介绍:http://msdn.microsoft.com/zh-cn/library/2bc0cxhc.aspx
4、使用 Windows 软件开发工具包 (SDK) 提供的名为程序集缓存查看器 (Shfusion.dll) 的 Windows 外壳扩展,使用该外壳扩展可将程序集拖放到全局程序集缓存中,
GAC将assembly存放在:系统盘符:\Windows\system\ 中,从中可以看出.net framework其实也使用了GAC,里面内含了很多.net的dll,就是那些我们可以直接使用但是不用
using 的assembly,例如:System.Net
(三)给程序集强命名
1 ,生成一个KeyFile
sn -k keyPair.snk
2, 得到程序集的MSIL
ildasm SomeAssembly.dll /out:SomeAssembly.il
3 ,为了避免冲突,把原来的DLL文件改名
ren SomeAssembly.dll SomeAssembly.dll.orig
4 , 使用导出的MSIL和刚创建的KeyFile生成一个新的的DLL文件。
ilasm SomeAssembly.il /dll /key= keyPair.snk
sn -k keyPair.snk
2, 得到程序集的MSIL
ildasm SomeAssembly.dll /out:SomeAssembly.il
3 ,为了避免冲突,把原来的DLL文件改名
ren SomeAssembly.dll SomeAssembly.dll.orig
4 , 使用导出的MSIL和刚创建的KeyFile生成一个新的的DLL文件。
ilasm SomeAssembly.il /dll /key= keyPair.snk