【问题标题】:Access to dll methods访问 dll 方法
【发布时间】:2011-06-21 05:49:55
【问题描述】:


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

【问题讨论】:

    标签: c# dll encapsulation


    【解决方案1】:

    使用共享代码库

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

    • 优势:他们看不到您想为自己保留的任何源,并且您不必设置任何类型的特殊托管 - 只需将 DLL 发送给他们
    • 缺点:您必须做额外的工作才能将代码库设置为可分叉。进行这种重构可能需要大量的开发投资。

    提供网络服务

    为客户提供网络服务以访问他们被允许访问的代码。

    • 优势:他们根本看不到任何来源。
    • 缺点:根据代码的不同,可能需要大量工作(使安全性达到标准),并且可能不可能(使性能达到标准)。或者这可能很容易,因为也许这些都不是大问题。您还必须设置专用主机才能使其正常工作。

    在共享 DLL 中使用 InternalsVisibleTo 属性

    1. 标记你想使用的方法internal
    2. 使用 DLL 对您自己的代码进行代码签名
    3. 对共享 DLL 进行代码签名
    4. [assembly: InternalsVisibleTo] 添加到共享DLL

    见:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

    • 优点:这是一个非常容易编写代码的解决方案
    • 缺点:客户端可以通过反射器访问完整的源代码。您可以通过混淆您的代码或制定许可协议以合法地禁止他们对您的代码进行逆向工程来缓解这种情况。

    【讨论】:

    • 很好的答案。我选择InternalsVisibleTo,因为我认为它是最简单的。谢谢
    【解决方案2】:

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

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

    【讨论】:

    • 您没有必须做任何事情 :) 企业通常可以通过许可协议来解决这个问题。
    • 当然可以,但是我遇到过这样的情况,即使让客户只能看到我们的代码也太过分了。
    【解决方案3】:

    您可以像#define 一样使用C# preprocessor directives 从同一代码库编译两个版本的库。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多