首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制.DLL访问

问限制.DLL访问
EN

Stack Overflow用户
提问于 2012-02-27 13:35:15
回答 3查看 1.7K关注 0票数 4

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

DLL1使用或调用DLL2。

有什么办法可以确保是DLL1,只有DLL1才能把电话打到DLL2中?

更新1

这背后的原因是:

我有一个WinForms解决方案,为了保持它的简单,它由一个视图项目和一个控制器项目(它生成一个独立的.dll)组成。在客户端计算机上安装应用程序之后,我意识到可以在它的"Program“文件夹中查看应用程序.dlls。有人可能会添加对控制器的.dll的引用。我想避免这种情况,因为调用的是视图项目,而只有视图项目。

更新2

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

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

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

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

更新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/

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 13:37:31

您可以在DLL2 internal中创建所有类型,并将InternalsVisibleToAttribute设置为DLL1。

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

或者,作为两个DLL1的作者,考虑将项目组合成一组DLL2到internal中存在的所有公共方法,就像以前一样,但是现在只有DLL1存在,它们只能被DLL1访问。

注意:以上所有假设都不使用反射。

票数 6
EN

Stack Overflow用户

发布于 2012-02-27 13:37:00

可以使用反射检查当前的调用堆栈。说我可能不会这么做,因为它既昂贵又缓慢。

您可以这样获得堆栈跟踪:

代码语言:javascript
复制
using System.Diagnostics;

// get call stack
StackTrace stackTrace = new StackTrace();

// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
票数 2
EN

Stack Overflow用户

发布于 2012-02-27 14:13:44

您可以将输出与ILMerge合并为单个exe。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9465903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档