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会在当前目录下生成**文件;

C#生成类库隐藏引用的dll,禁止外部调用

  • 签名程序集

    • 将keyfile.snk拷贝到类库B的目录下;

    • 打开B的属性,进入签名,勾选为程序集签名,选择强名称**文件,生成类库;

C#生成类库隐藏引用的dll,禁止外部调用

  • 添加程序集到缓存:cmd中执行gacutil -i B.dll
    C#生成类库隐藏引用的dll,禁止外部调用
  • 修改引用属性:类库A添加类库B的引用,查看引用的属性,将复制本地修改为False,重新生成类库,bin下就只有一个A.dll了。
    C#生成类库隐藏引用的dll,禁止外部调用

参考资料