C#生成类库隐藏引用的dll,禁止外部调用
场景
两个类库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了。