在两个项目中使用一个类

时间:2014-07-11 11:41:29

标签: c# code-reuse

我有一个类ProductKeyLib,它是项目MyProgram-Web的一部分,它本身就是解决方案MyProgram的一部分。截至目前,此lib仅检查密钥是否有效,但不生成密钥。 密钥生成的接口将位于项目MyProgram-KeyGen中,该项目也是解决方案MyProgram的一部分。

现在,棘手的部分: 我希望在一个类中同时具有这两个函数(生成和检查),因为正如您可能猜到的,当一切都在一个文件中时,密钥生成和密钥检查之间的100%兼容性更好,并且我的单元测试也会更容易然后

但是:两个程序都应该在程序中包含该部分,我不想要一个特殊的dll。此外,MyProgram-Web应该只包括检查部分,而不是密钥生成。

我可以在VisualStudio中执行此操作吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

嗯,这可能不是一个好主意,但您可以使用编译器定义和链接源文件的组合。

所以你有一个cs文件,其中包含链接到两个项目的所有代码(没有公共库 - 只有单个代码文件)。在其中,您将获得所有代码:

#if KeyGen
public string GenerateKey(...)
{
  ...
}
#endif

public bool CheckKey(...)
{
  ...
}

然后,在您的keygen项目中,您将放置一个名为KeyGen的编译器定义,生成代码将仅在keygen部分中编译,而不是在客户端应用程序中编译。

然而,这仍然是“默默无闻的安全”。如果密钥生成和检查实际上很重要,那么这将是不够的。例如,只要知道如何检查密钥,您就可以在很多情况下轻松找到构建密钥的方法(即使不使用GPU,即使是暴力算法也非常可靠。)