访问dll方法

时间:2011-06-21 05:49:55

标签: c# dll encapsulation


我为我的客户准备了一些C#dll来做一些功能 问题是我也使用相同的dll 我怎样才能为他提供一些方法以及我可用的所有方法 谢谢,

3 个答案:

答案 0 :(得分:5)

使用共享代码库

只需编译两个项目。一个包含您提供给客户的DLL的源,另一个包含您自己保留的所有源。

  • 优势:他们没有看到您想要为自己保留的来源,并且您不必设置任何类型的特殊主机 - 只需向他们发送DLL
  • 缺点:您必须做额外的工作才能将代码库设置为可分叉。做这种重构可能是一项巨大的开发投资。

提供网络服务

为客户提供Web服务,以访问他们可以访问的代码。

  • 优势:他们根本看不到任何来源。
  • 缺点:根据代码的不同,可能需要做很多工作(以获得安全保护),并且可能是不可能的(将性能提升到鼻烟)。或者它可能很容易,因为这些可能不是很大的问题。您还必须设置专用托管才能使用。

使用共享DLL中的InternalsVisibleTo属性

  1. 标记您要使用的方法internal
  2. 代码签署您自己的使用DLL的代码
  3. 代码签署共享DLL
  4. [assembly: InternalsVisibleTo]添加到共享DLL
  5. 请参阅:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

    • 优势:这是一个非常简单的代码编解方案
    • 缺点:客户端可以通过Reflector访问完整的源代码。您可以通过混淆代码或设置合法禁止他们对代码进行反向工程的许可协议来缓解此问题。

答案 1 :(得分:1)

您必须编译程序集的两个版本。您分发给您的cutomer的版本需要完全排除您不希望他们访问的方法,否则无论您如何“隐藏”它们,都可以通过Reflection访问它们。

(假设您不希望对程序集进行签名)

答案 2 :(得分:0)

您可以使用C# preprocessor directives之类#define来编译同一代码库中的两个版本的库。

然后将一个版本发送给您的客户,保留另一个版本。