访问dll方法
我为我的客户准备了一些C#dll来做一些function。
问题是我也使用相同的DLL。
我怎样才能为他提供一些方法以及我可用的所有方法。
谢谢,
使用共享代码库
只需编译两个项目。 一个包含您提供给客户的DLL的源,另一个包含您自己保留的所有源。
- 优点:他们没有看到你想保留的源代码,你不需要设置任何类型的特殊主机 – 只需向他们发送DLL
- 缺点:您必须做额外的工作来设置您的代码库才能分叉。 做这种重构可能是一项巨大的开发投资。
提供Web服务
为客户提供Web服务以访问允许他们访问的代码。
- 优势:他们根本看不到任何消息来源。
- 缺点:根据代码的不同,可能需要做很多工作(以获得安全保护),并且可能是不可能的(将性能提升到鼻烟)。 或者它可能很容易,因为这些可能不是很大的问题。 您还必须设置专用托管才能使用。
使用共享DLL中的InternalsVisibleTo
属性
- 标记您要在
internal
使用的那些方法 - 代码签署您自己的使用DLL的代码
- 代码签署共享DLL
- 将
[assembly: InternalsVisibleTo]
添加到共享DLL
请参阅: http : //msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx
- 优点:这是一个非常简单的代码解决方案
- 缺点:客户端可以通过Reflector访问完整的源代码。 您可以通过混淆代码或设置合法禁止他们对代码进行反向工程的许可协议来缓解这种情况。
您必须编译两个版本的程序集。 您分发给cutomer的版本需要完全排除您不希望他们访问的方法,否则无论您如何“隐藏”它们,都可以通过Reflection访问它们。
(假设您不希望对程序集进行签名)
您可以使用#define
类的C#预处理程序指令从相同的代码库编译库的两个版本。
然后将一个版本发送给您的客户,为您自己保留另一个版本。