如何在插件中公开静态类而不分发该类的程序集和完整的MSIL?

时间:2012-02-07 02:31:29

标签: c# plugins interface factory

我在c#中有一个软件,它公开了一个插件接口。插件具有与工厂交互的能力,该工厂创建了用于插件的某些工具,但是我不希望为与插件接口的程序集一起编译的工厂分发代码。问题是工厂不是一个接口,它是系统的静态工厂内部。如何揭露工厂的作用,而不暴露工厂的内容,可以这么说。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

由于工厂是任何插件的依赖项,您无法对其进行模糊/加密 - 如果您这样做,插件将无法使用工厂。您不必将C#源分发给您的工厂,但是您必须将已编译的程序集包含在工厂中,否则插件将无法运行。所以简短的回答是“你不能”。

答案 1 :(得分:0)

您可以use ILMerge将工厂的装配/装配与软件的装配/装配相结合。除此之外......你需要将工厂的代码放在某个地方,如果是.NET则意味着分发程序集。

答案 2 :(得分:0)

一个非常不吸引人的选择是将代码包含到静态工厂中作为资源加密到另一个程序集,让另一个程序集解密并动态编译它然后只使用反射来访问它必要。当然这是一种可能性,但我很少推荐它。

如果您必须共享代码,更好的选择是实际共享代码。

答案 3 :(得分:0)

你可以将它包装在一个实现IFactoryThing的类中,这样,客户端代码就可以在这个接口上进行调用。

仍然需要分发您的代码。