我用c#做开发,之前员工留下的一个dll,有源代码,里面定义了很多底层的函数和接口。现在我需要另外写一些函数,来调用这些接口,而让原来的接口对外部不可见。我目前想到了两种方案:1、在原dll中,加一个class,访问权限为public,其它原来的类和函数全部用private
但原来的代码非常庞杂,里面又有抽象类和接口,我试着修改了几个,报了一大堆“xx.xx的访问权限比xx还低”,小弟才疏学浅,不具备维护能力,而且代码量很庞大,修改起来非常耗时,而且容易出错。2、另外建一个类库,引用这个dll
但编译出来是两个dll,外部调用的时候,如果调用a.dll,还是可以直接操作底层的函数。请问各位高手,有没有其它好的解决方法?或者前两种方法可行,只是我操作方式有误?多谢指教

解决方案 »

  1.   

    楼主还不知道吧,用C#生成的dll文件不是真正意义上dll,只要用reflector打开这个dll文件,源代码就一览无遗了。当然这个也是.net程序集的通病了。
    目前保护.net代码的方法通常有混淆和加密等。要想让别人看不见dll里面的方法,几乎是不可能的了。就算你混淆后又加密那方法名还是可见的。最主要的是将关键的代码隐藏或加密才有一定的保障。
      

  2.   

    to hiddkiller:
    呵呵,您批评的是,我承认,但项目时间紧迫,我没有太多的时间去阅读源代码,加以调整。我想也许有方法很简单就可以实现我要的功能,所以请教下个各位高手。如果没有的话,还是必须加以耐心去调整源代码的访问权限了。to geaim:
    就算加了private修饰符,也可以用工具看见原方法名?如果是这样的话,那只有混淆了,但是混淆前,还是得把外部访问的问题解决了,望赐教。
      

  3.   

    不论用什么方法,我只需要实现,原dll的方法和函数对外全部隐藏,外部调用dll的时候,只能看见我公开的方法。源代码的保护暂不考虑。想问下有没有不修改原dll里访问修饰符,能够实现的方法,谢谢。
      

  4.   

    、在原dll中,加一个class,访问权限为public
      

  5.   

    好像要加密或混淆,否则NET编译的DLL都可以用工具查看到的
      

  6.   

    刚刚下载了一个reflector,果然把我写的dll代码全部解释成了源代码,连工程项目文件都建好了,直接可以再次编译,0错误。强。我更加迷茫了,不知道如何隐藏我原来的方法和接口,只展示我新写的函数。
      

  7.   

    1、在原dll中,加一个class,访问权限为public,其它原来的类和函数全部用private 
    这条明显不太可行,原来的public,就是为了类库或WEB中的其它类调用,全部弄成private,那不完蛋了
      

  8.   

    我在public的方法中,会另外对原来的接口重新进行组织、封装,将操作过程简单化。原来的方法中有些太底层,使用有安全隐患,所以想把它们全部封了,外部只能调用public的方法。ps:研究了一下午混淆,正在研究加密
      

  9.   

    lz可以尝试将原来dll中public的方法修改为internal,然后在进行封装处理。
      

  10.   

    微软编写的dll文件,就是.NET组件那些dll文件用reflector都可以查看源代码的。可以这样说,只要是托管的dll组件,就可以用reflector都可以查看源代码