gpt4 book ai didi

c# - 限制 .DLL 访问

转载 作者:行者123 更新时间:2023-11-30 13:49:26 24 4
gpt4 key购买 nike

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

DLL1 使用或调用 DLL2。

有没有一种方法可以确保调用 DLL2 的是 DLL1,而且只有 DLL1?

更新 1

这背后的原因是:

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

更新 2
我喜欢将 Controller 分离到一个单独的项目中的原因之一是我可能有许多不同的 View 项目调用并使用相同的 Controller 。然后我只需要为所有 View 维护一个 Controller 项目。例如,一个 win 表单应用程序和一个测试项目,甚至是一个使用相同 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com