【问题标题】:Using a class in two projects [closed]在两个项目中使用一个类[关闭]
【发布时间】:2014-09-02 00:41:00
【问题描述】:

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

现在,棘手的部分: 我希望将两个功能(生成和检查)放在一个类中,因为正如您可能猜到的那样,当所有内容都在一个文件中时,可以更好地实现密钥生成和密钥检查之间的 100% 兼容性,而且我的单元测试也会更容易那么。

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

我可以在 VisualStudio 中做到这一点吗?如果有,怎么做?

【问题讨论】:

  • 保持原样。编写集成测试以确保它们保持一致...
  • 您可以将源代码文件作为链接包含到项目中。这将是两个不同的类,但您对它们都有一个访问点。只需在“添加现有项目”对话框中按“添加”按钮上的箭头,然后选择“添加为链接”
  • 不要认为这是一个好主意,但正如@mazharenko 提到的,你可以这样做..

标签: c# code-reuse


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 每种许可证密钥或密钥检查都可以被逆向工程和/或从程序中删除。所以每个程序都可以在不需要密钥或任何东西的情况下工作。没有“工作”的 DRM - 除了在我自己的服务器上保持程序安全,只向客户提供 API。 (这不适用于我们的客户,因为有些需要独立于互联网)。所以,是的,这“默默无闻的安全”,就像每个许可证密钥一样。如果您知道如何进行 100% 安全的离线检查,最好不要告诉我 - 把它卖给 RIAA,他们会付给您数百万美元。
  • PS:我需要提到该程序是 50% 编译的 C# 和 50% 的“编译”(混淆/缩小)JS 吗? PPS:我很小心,没有在 JS 中包含许可证检查:p
  • 是的,你正在向合唱团布道。如果只有负责 DRM 的人明白绕过任何检查是多么容易……我实际上也不得不实施一次 DRM。您必须通过发送短信激活应用程序。验证过程非常稳健。客户端的检查?只需在此处添加一个小跳跃,是的,不检查! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2012-06-17
  • 2015-02-17
相关资源
最近更新 更多