我有一个由大约 10 个重要的 DLL 文件组成的解决方案,这些文件是在同一个解决方案中开发的,当我发布这个解决方案时,所有的 DLL 文件(内部的公共类和函数)都是开放的并且可供所有其他人使用。如何使 dll 文件中的类和函数只能通过相同的解决方案可见和可用?!
问候。
我有一个由大约 10 个重要的 DLL 文件组成的解决方案,这些文件是在同一个解决方案中开发的,当我发布这个解决方案时,所有的 DLL 文件(内部的公共类和函数)都是开放的并且可供所有其他人使用。如何使 dll 文件中的类和函数只能通过相同的解决方案可见和可用?!
问候。
根据您的问题,我了解到您事先(即在编译时)知道哪些程序集将一起发送。
因此,有两种解决方案:
或者,您将类型标记为internal
并将所有代码部署在一个程序集中。由于您似乎将所有组件一起运送,因此在运送前不将所有组件合并到一个组件中并不是不可避免的原因(许可问题除外)。
如果你能做到这一点,你仍然可以将所有内容开发为单独的项目,并使用一些构建工具来创建一个包含所有代码的总括项目文件。
或者,您创建类型internal
并将解决方案中的其他程序集声明为朋友。在解决方案中的另一个程序集应该可以看到其内部类型的程序集上
声明。InternalsVisibleToAttribute
请注意,我在编译器“可见”的意义上解释了“可见”,因此引用您的程序集的人可以针对您的 API 进行编码。如果您想阻止您的代码以任何方式真正可见,则必须按照CodeCaster的评论中的建议使用混淆,即使这也可能不是牢不可破的。
您可以对所有程序集进行强命名。然后,当调用公共方法或实例化类时,您可以通过获取调用程序集Assembly.GetCallingAssembly()
并检查强名称,如果不匹配则抛出异常(虽然不确定所有这些东西的性能)。这就是我目前所能想到的,除了将所有东西都放在一个组件中并使其内部化。