程序集和托管模块的最大的区别,就是程序集有一个程序集清单。
多文件程序集的链接,有两种方法:
Eg:
Ru的程序:
using System;
class RuType
{
Public void Rumodule()
{
}
};
Fu的程序:
using System;
class FuType
{
public void FuModule()
{
}
};
1、/t:module ru.cs先把其中的一个cs文件变成netmodule的文件,然后引用即可/t:library /addmodule:ru.netmodule fu.cs
2、用程序集链接器来完成。
/t:module fu.cs
/t:module ru.cs
al /t:library /out:all.dll fu.netmodule ru.netmodule
简单程序集的部署:
程序集的标示:
1、程序集的名称
2、程序集的版本
–主版本号、次版本号、生成版本号、修订版本号(dll的版本的不同,引起的冲突。元组解决了这些问题。)
3、程序集的文化信息(语言的不同(中英文,地域语言的不同))
–包含主标记及次标记的字符串
私有程序集(能被一个应用程序使用)
共享程序集(能被多个应用程序使用)特点:强名称(强名称程序集的真正不同在于它必须通过发行者的公钥私钥对进行签名)
--使用程序集编程(密钥文件)
命名一个StrongNamed.cs的文件
using System;
using System.Reflection;
namespace Microsoft.Samples.assemblies.StrongName
{
public class Tester
{
public static void Main()
{
Console.WriteLine("Try to use assembly");
}
}
}
生成.exe文件
csc /out:strongname.exe strongnamed.cs
生成一个.dll文件
csc /out:strongname.dll strongnamed.cs
使用gacutil -i StrongName.dll命令,加密(发现这时候会报错误,因为没有强名称的支持)
于是:
使用强名称工具生成.snk文件sn -k strongname.snk
用.snk文件重新编译源文件
csc /out:strongname.dll /t:library strongname.cs /keyfile:StrongName.snk
再输入:
gacutil -i StrongName.dll这次成功了!
如果我们想列出全局程序集缓存中所有的全局程序集,使用gacutil /l命令
如果我们要清除缓存里的程序集,则使用gacutil /u命令
如果要查看程序集里面的内容,用ildasm(反汇编)工具即可。输入命令ildasm strongname.dll
注:所有的命令均在Microsoft .NET Framework SDK v2.0中sdk命令提示符里面运行。