参考几位大虾的文章,我写了一个ClassLibrary5.dll.首先用SN工具建了一个key.snk,把公钥导出来保存.我用的是VS2005
using System;
using System.Security.Permissions;namespace ClassLibrary5
{
    public class SecuredClass
    {
        public SecuredClass()
        {        }
        [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand,PublicKey="0024000004800000940000000602000000240000525341310004000001000100732e542fb8dec9abd7561caafc94135a379cad08513143f315fdca109b428866e421694b4c16dee7bd3aff60814dcc7f2779662597261c94f3d587cc5516bc7aceb2c2db251597690e9038466f74dc4eaabc1c842ea43ac9d0fcfbdf42ba63e13fe9309095aab9351f0b7cf1f24d2a1f67ef00fc2c8cad7b5041966f213913b6")]
        private string getTopSecretInformation()
        {
            return "secret code:000111";
        }
    }
}
然后又在项目-项目属性-签名里面用key.snk为程序集签名.延迟签名没选.这样不就行了么?不是说只有同样经过签名的程序才可以访问么?
我随便建立了一个控制台应用程序.也没签名,直接就是项目-添加引用,找到ClassLibrary.dll,确定.
然后ClassLibrary5.SecuredClass secClass = new  ClassLibrary5.SecuredClass();
            Console.WriteLine(secClass.getTopSecretInformation());
            
却能够访问.不是说可以限制别的程序访问我写的DLL组件么?
注:因为是VS2005,所以没法用[assembly:AssemblyKeyFile(@"c:\key.key")].
或者要用什么方式才可以限制别人访问我写的DLL呢?
大家帮帮忙.

解决方案 »

  1.   

    在ClassLibrary5的AssemblyInfo需要指定snk文件具体参考
    dll的授权访问
    ref:http://www.chenjiliang.com/Article/View.aspx?ArticleID=96&TypeID=5
    VS2005,所以没法用[assembly:AssemblyKeyFile(@"c:\key.key")].
    ------------------------------
    vs2005需要手动添加AssemblyInfo文件good luck
      

  2.   

    我手动添加了.
    [assembly:AssemblyKeyFile(@"c:\key.key")]
    但是有警告:
    使用命令行选项“/keyfile”或适当的项目设置代替“AssemblyKeyFile” 所以我才在项目-项目属性-签名里设置的签名啊.
      

  3.   

    动脑子想想就知道,.NET Framework就是签了强名的……谁都能调用。
      

  4.   

    那如果修改密码,注册验证之类的类放在哪里安全呢?
    我本来想放在一个DLL中间的.这么看来是不可以的了.另外.
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=96&TypeID=5
    文章里写的是不对的还是怎么着?希望高手赐教啊.
      

  5.   

    你可以通过CAS检查调用方强名,但是这也不能解决在完全受信任环境下CAS不检查权限。