Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止将.Net dll添加为引用?_.net_Visual Studio_Security_Dll - Fatal编程技术网

如何防止将.Net dll添加为引用?

如何防止将.Net dll添加为引用?,.net,visual-studio,security,dll,.net,Visual Studio,Security,Dll,假设我已经编写了一个.NETDLL,并希望将其与我的应用程序一起分发。我如何才能防止任何精明的用户安装VS的副本,从而在他们自己的应用程序中添加对此dll的引用?我严重怀疑这是可能的。即使是这样,一个具有完全推力的程序集也可以伪造所有证据并假装是您的程序。无法阻止用户添加引用。这是DLL部分的被动操作,您无法阻止它发生 不过,您可以做的是将添加引用作为一项不值得的操作。例如,如果DLL中的所有类型都是内部的或私有的,那么用户使用DLL中的类型所需的不仅仅是添加引用。此外,混淆DLL将使其更加困难

假设我已经编写了一个.NETDLL,并希望将其与我的应用程序一起分发。我如何才能防止任何精明的用户安装VS的副本,从而在他们自己的应用程序中添加对此dll的引用?

我严重怀疑这是可能的。即使是这样,一个具有完全推力的程序集也可以伪造所有证据并假装是您的程序。

无法阻止用户添加引用。这是DLL部分的被动操作,您无法阻止它发生


不过,您可以做的是将添加引用作为一项不值得的操作。例如,如果DLL中的所有类型都是内部的或私有的,那么用户使用DLL中的类型所需的不仅仅是添加引用。此外,混淆DLL将使其更加困难

您不能阻止某人向您的dll添加引用。但是,如果他们添加了引用,您可以做的是让他们很难使用它

代码访问安全性(CAS)可用于防止未经授权的代码调用程序集,但这会影响调用的性能,因此过于苛刻

另一种方法是将dll中的所有内容标记为内部。如果有其他程序集需要访问dll中的类,请使用该属性使它们成为朋友程序集。这允许其他程序集访问dll的内部类。将其与已签名的程序集(用于
InternalsVisibleTo
定义)绑定在一起就足够了。

您可能会发现“StrongNameIdentityPermission”类很有用


尽管.NET不允许真正的静态链接,但您可以伪造它,将dll和exe打包到一个程序集中。以下是一个可以执行此操作的工具:
可能还有其他问题。

您可以对DLL(工具->Dotfuscator社区版)进行模糊处理,使其不值得引用您的DLL。

如果需要,Visual Studio中内置了一个免费的模糊处理程序。(Tools->Dotfuscator Community Edition)非常感谢-我当然会看看如何保护我的程序集,尽管我突然想到,如果dll中的所有类型都是私有的或内部的,那么该dll将不会非常有用。我还研究了模糊处理-快速使用Dotfuscator CE,这看起来还可以-但可能需要获得pro版本,因为CE看起来不够强大。您可以将其他程序集作为朋友,然后它们可以访问内部typesEven,如果您使用ILMerge链接所有内容,则有人仍然可以添加exe作为引用,并轻松调用任何公共方法。