【问题标题】:DLL file usage not allowed to others in C#在 C# 中不允许其他人使用 DLL 文件
【发布时间】:2012-07-03 22:36:10
【问题描述】:

我有一个由大约 10 个重要的 DLL 文件组成的解决方案,这些文件是在同一个解决方案中开发的,当我发布这个解决方案时,所有的 DLL 文件(内部的公共类和函数)都是开放的并且可供所有其他人使用。如何使 dll 文件中的类和函数只能通过相同的解决方案可见和可用?!

问候。

【问题讨论】:

  • 你试过什么?看看混淆,你不会比这更进一步。 DLL 总是可以被反编译的。

标签: c# visual-studio-2008 dll .net-3.5 class-library


【解决方案1】:

根据您的问题,我了解到您事先(即在编译时)知道哪些程序集将一起发布。

因此,有两种解决方案:

  • 或者,您将您的类型标记为internal 并将您的所有代码部署在一个程序集中。由于您似乎将所有组件一起运送,因此在运送之前没有将所有组件合并到一个组件中的必然理由(许可问题除外)
    如果你能做到,您仍然可以将所有内容开发为单独的项目,并使用一些构建工具来创建一个包含所有代码的总括项目文件。

  • 或者,您将类型设为internal,并将解决方案中的其他程序集声明为好友。
    在其内部类型应该对解决方案中的另一个程序集可见的程序集上声明InternalsVisibleToAttribute

请注意,我在编译器“可见”的意义上解释了“可见”,因此引用您的程序集的人可以针对您的 API 进行编码。如果您想阻止您的代码以任何方式真正可见,则必须按照CodeCaster 的评论中的建议使用混淆,即使这样也可能不是牢不可破的。

【讨论】:

  • 通过哪种方式我可以在编译后将我的所有程序集(dll文件)分开并且不能被其他人使用?
  • @MOLi:我想我刚刚回答了上面的问题(第二个列表项)。请让我知道哪些具体点不清楚。
  • 对不起,我有点忙,我会测试你上面提到的,让你知道结果。提前致谢。
【解决方案2】:

你可以strong-name all your assemblies。然后,当调用公共方法或实例化类时,您可以通过Assembly.GetCallingAssembly() 获取调用程序集并检查强名称,如果不匹配则抛出异常(虽然不确定所有这些东西的性能)。这就是我目前所能想到的,除了将所有东西都放在一个组件中并使其内部化。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多