场景
两个类库A和B,A引用了B,A生成时默认会在bin下生成A.dll,B.dll。
需求:将A提供给外部进行二次开发,但不希望B被看到并直接调用(通过A封装B以限制B的使用)。
解决方法
-
生成密钥
-
找到Sn.exe,我的是Win7 64位,在
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64下; -
打开cmd,进入该目录,
cd C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64; -
cmd中执行
sn -k keyfile.snk会在当前目录下生成密钥文件;
-

-
签名程序集
-
将keyfile.snk拷贝到类库B的目录下;
-
打开B的属性,进入签名,勾选
为程序集签名,选择强名称密钥文件,生成类库;
-

- 添加程序集到缓存:cmd中执行
gacutil -i B.dll

- 修改引用属性:类库A添加类库B的引用,查看引用的属性,将
复制本地修改为False,重新生成类库,bin下就只有一个A.dll了。

本文介绍了如何在C#中处理类库引用的问题,以隐藏引用的DLL,防止外部直接调用。通过生成强名称密钥文件、签名程序集、添加程序集到缓存及修改引用属性,可以实现只提供主类库A,隐藏并限制对B类库的直接访问。
2万+

被折叠的 条评论
为什么被折叠?



