如何封闭DLL中的方法,使其对外不可见

mybvc 2009-02-10 11:32:05
我用c#做开发,之前员工留下的一个dll,有源代码,里面定义了很多底层的函数和接口。

现在我需要另外写一些函数,来调用这些接口,而让原来的接口对外部不可见。

我目前想到了两种方案:

1、在原dll中,加一个class,访问权限为public,其它原来的类和函数全部用private
但原来的代码非常庞杂,里面又有抽象类和接口,我试着修改了几个,报了一大堆“xx.xx的访问权限比xx还低”,小弟才疏学浅,不具备维护能力,而且代码量很庞大,修改起来非常耗时,而且容易出错。

2、另外建一个类库,引用这个dll
但编译出来是两个dll,外部调用的时候,如果调用a.dll,还是可以直接操作底层的函数。

请问各位高手,有没有其它好的解决方法?或者前两种方法可行,只是我操作方式有误?多谢指教
...全文
366 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
mybvc 2009-02-11
  • 打赏
  • 举报
回复
感谢各位,最后经过综合考虑,还是选择了混淆和加密的方式来达到目的,再次感谢各位提供思路。结贴。
哈哈潜伏哥 2009-02-11
  • 打赏
  • 举报
回复
微软编写的dll文件,就是.NET组件那些dll文件用reflector都可以查看源代码的。可以这样说,只要是托管的dll组件,就可以用reflector都可以查看源代码
mybvc 2009-02-10
  • 打赏
  • 举报
回复
不论用什么方法,我只需要实现,原dll的方法和函数对外全部隐藏,外部调用dll的时候,只能看见我公开的方法。源代码的保护暂不考虑。

想问下有没有不修改原dll里访问修饰符,能够实现的方法,谢谢。
mybvc 2009-02-10
  • 打赏
  • 举报
回复
to hiddkiller:
呵呵,您批评的是,我承认,但项目时间紧迫,我没有太多的时间去阅读源代码,加以调整。

我想也许有方法很简单就可以实现我要的功能,所以请教下个各位高手。如果没有的话,还是必须加以耐心去调整源代码的访问权限了。

to geaim:
就算加了private修饰符,也可以用工具看见原方法名?如果是这样的话,那只有混淆了,但是混淆前,还是得把外部访问的问题解决了,望赐教。
qiume 2009-02-10
  • 打赏
  • 举报
回复
如果你想封装实现的话,可以用包装物模式,不过你一样的要读懂源码......
如果你想保护你的源代码,很难......
哈哈潜伏哥 2009-02-10
  • 打赏
  • 举报
回复
楼主还不知道吧,用C#生成的dll文件不是真正意义上dll,只要用reflector打开这个dll文件,源代码就一览无遗了。当然这个也是.net程序集的通病了。
目前保护.net代码的方法通常有混淆和加密等。要想让别人看不见dll里面的方法,几乎是不可能的了。就算你混淆后又加密那方法名还是可见的。最主要的是将关键的代码隐藏或加密才有一定的保障。
hiddkiller 2009-02-10
  • 打赏
  • 举报
回复
貌似耐心问题
EveryCase 2009-02-10
  • 打赏
  • 举报
回复
tigerleq 2009-02-10
  • 打赏
  • 举报
回复
不知道
听过接口
适配器的概念没有
tweeger 2009-02-10
  • 打赏
  • 举报
回复
lz可以尝试将原来dll中public的方法修改为internal,然后在进行封装处理。
mybvc 2009-02-10
  • 打赏
  • 举报
回复
我在public的方法中,会另外对原来的接口重新进行组织、封装,将操作过程简单化。

原来的方法中有些太底层,使用有安全隐患,所以想把它们全部封了,外部只能调用public的方法。

ps:研究了一下午混淆,正在研究加密
cwmwss 2009-02-10
  • 打赏
  • 举报
回复
1、在原dll中,加一个class,访问权限为public,其它原来的类和函数全部用private
这条明显不太可行,原来的public,就是为了类库或WEB中的其它类调用,全部弄成private,那不完蛋了
qiqundelang 2009-02-10
  • 打赏
  • 举报
回复
貌似难度很大
wuyi8808 2009-02-10
  • 打赏
  • 举报
回复
不容易。
mybvc 2009-02-10
  • 打赏
  • 举报
回复
刚刚下载了一个reflector,果然把我写的dll代码全部解释成了源代码,连工程项目文件都建好了,直接可以再次编译,0错误。

强。

我更加迷茫了,不知道如何隐藏我原来的方法和接口,只展示我新写的函数。
liujiayu10 2009-02-10
  • 打赏
  • 举报
回复
好像要加密或混淆,否则NET编译的DLL都可以用工具查看到的
不懂必须要问 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 geaim 的回复:]
楼主还不知道吧,用C#生成的dll文件不是真正意义上dll,只要用reflector打开这个dll文件,源代码就一览无遗了。当然这个也是.net程序集的通病了。
目前保护.net代码的方法通常有混淆和加密等。要想让别人看不见dll里面的方法,几乎是不可能的了。就算你混淆后又加密那方法名还是可见的。最主要的是将关键的代码隐藏或加密才有一定的保障。
[/Quote]、

那么微软的DLL也是这样?
mybvc 2009-02-10
  • 打赏
  • 举报
回复
楼上的方法我考虑过,但是要修改原来的源代码,将近1M的代码,里面的接口、抽象类的权限又牵扯复杂,实在不太好处理
JeffrySun 2009-02-10
  • 打赏
  • 举报
回复
、在原dll中,加一个class,访问权限为public

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧