假设我有两个 .dll,Dll1 和 Dll2。

DLL1 使用或调用 DLL2。

有没有办法可以确保它是 DLL1 并且只有 DLL1 正在调用 DLL2?

更新 1

这背后的原因是:

我有一个 WinForms 解决方案,为了简单起见,它由一个 View 项目和一个 Controller 项目(生成一个单独的 .dll)组成。在客户端计算机上安装应用程序后,我意识到可以在“Program Files”文件夹中查看应用程序 .dll。有人可能会添加对 Controller 的 .dll 的引用。我想避免这种情况,因此它是 View 项目,并且只有进行调用的 View 项目。

更新 2
我喜欢将 Controller 分成一个单独的项目的原因之一是我可能有许多不同的 View 项目调用和使用相同的 Controller 。然后我只需要为所有 View 维护一个 Controller 项目。例如,一个 Win Forms 应用程序和一个测试项目,甚至是一个使用相同 Controller 项目的网站。但是采用这种方法,我将面临我提到的安全问题(避免和控制我的 dll 的不当使用)。

所以我有一种方法,通过使用不同的文件夹编译为一个 .dll,我认为这是正确的并解决了我的安全问题,但它使我只能拥有一个 View 。

另一方面,如果我有单独的项目,我将面临安全问题。

我仍然怀疑我应该如何去做,因为我仍然想继续使用不同的项目,因为我提到的原因。

更新 3
关于使用 StrongNameIdentityPermission 权限需求的任何建议?
http://msdn.microsoft.com/en-us/library/ff648663.aspx(请参阅:限制哪些代码可以调用您的代码)
http://blogs.msmvps.com/manoj/2004/10/20/tip-strongnameidentitypermission/ http://www.morganskinner.com/Articles/StrongNameIdentityPermission/

谢谢

最佳答案

您可以在 DLL2 internal 中设置所有类型并将其中的 InternalsVisibleToAttribute 设置为 DLL1。

为确保这不会被破坏,您应该对 DLL1 进行签名并确保在属性中使用其公钥。

或者,作为两个 DLL 的作者,可以考虑将项目合并为一个 - 将 DLL2 中存在的所有公共(public)方法设置为 internal ,就像以前一样,但现在只有 DLL1 存在并且只能由它访问。

注意:以上所有内容均假设未使用反射。

关于c# - 限制 .DLL 访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9465903/

10-08 22:25