例如:我用vs2005开发的dll,别人拿过来,添加到他的工程中应该能用吧?如果能,那怎样禁止别人调用我的dll!有人说用:强签名,可是我对这方面不懂,请高手赐教。。

解决方案 »

  1.   

    使用强名称为程序集签名的方法有两种: 使用 .NET Framework SDK 提供的程序集链接器 (Al.exe)。 
    使用程序集属性将强名称信息插入代码中。您可以使用 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute,这取决于要使用的密钥文件所在的位置。 
    要使用强名称为程序集签名,必须具有加密密钥对。有关创建密钥对的更多信息,请参见创建密钥对。使用“程序集链接器”创建程序集并为其签署强名称 在命令提示处,键入下列命令: 
    al /out:<程序集名> <模块名> /keyfile:<文件名> 在此命令中,“程序集名”是要使用强名称签名的程序集的名称,“模块名”是用于创建程序集的代码模块的名称,“文件名”是包含密钥对的容器或文件的名称。 下面的示例使用密钥文件 sgKey.snk 为程序集 MyAssembly.dll 签署强名称。al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk使用属性为程序集签署强名称 在代码模块中,添加 AssemblyKeyFileAttribute 或 AssemblyKeyNameAttribute,指定在使用强名称为程序集签名时要用到的密钥对所在的文件或容器的名称。 
    下面的代码示例与名为 sgKey.snk 的密钥文件一起使用 AssemblyKeyFileAttribute。[Visual Basic]
    <Assembly:AssemblyKeyFileAttribute("sgKey.snk")>[C#]
    [assembly:AssemblyKeyFileAttribute(@"..\..\sgKey.snk")]在编译时也可延迟为程序集签名。有关更多信息,请参见延迟为程序集签名。当使用强名称对程序集进行签名时,程序集链接器 (Al.exe) 查找与当前目录和输出目录相关的密钥文件。当使用命令行编译器时,只需将密钥复制到包含代码模块的当前目录即可。请参见
    创建和使用具有强名称的程序集 | 创建密钥对 | 延迟为程序集签名发送有关此主题的意见 &copy; 2001-2002 Microsoft Corporation。保留所有权利。 
      

  2.   

    强签名作用不是为了防止别人使用你的Dll。
    我想问下,别人工程中调用和你自己工程中调用有什么区别?
      

  3.   

    肯定有区别,dll是随着exe发布的,别人就可以调用你的dll
      

  4.   

    强签名可以通过EMIT去掉,这个有人发过文章了,也不算复杂...既然发布了DLL,就不要想那么多了除非你是发布了工程,不想让别人看代码,那么就用混淆器就是了想看代码的话,总有办法能看到,不想看的话,给看代码都不想去看...