【问题标题】:Removing a Dependency on a Subclass DLL删除对子类 DLL 的依赖
【发布时间】:2011-09-28 19:45:36
【问题描述】:

(这个问题的上下文是XNA特有的,但原理是通用的。)

我有一个项目A,它的Game 类扩展了Microsoft.Xna.Framework.Game。项目A 是一个类库并输出一个DLL。

然后我有一个项目B,它扩展了A.Game 类并引用了A.dll。当我尝试编译 B 时,我得到了这个错误:

The type 'Microsoft.Xna.Framework.Game' is defined in an assembly that is not referenced. You must add a reference to assembly [...]

我不明白为什么会这样; B 只依赖于 A,A 内部依赖于 Xna。是因为 A.Game 是一个子类吗?有没有办法消除这种依赖要求?

我的目标是让A自我发布;它只输出一个 DLL,任何项目都引用它;最终用户(开发人员)不需要它在内部使用的任何内容。

我还在transitive dependencies 上查看了这个问题,但我还没有公开A.Game 中的任何字段——只有子类。

【问题讨论】:

    标签: c# assemblies dependencies


    【解决方案1】:

    没有办法避免这种情况。您不能将 Xna 库静态链接到 A,这意味着为了使 A 运行,您还需要可用的 Xna dll。请注意,您可以自行发布 A,然后告诉 A 的任何用户他们也需要 Xna dll,但这是您能做的最好的事情。

    图像您有 A,但没有 Xna dll。您如何实例化 Game 类?它是 Xna dll 中包含的 Type 的子类,因此这意味着它的基本构造函数也在该 dll 中。

    【讨论】:

    • 如何使用组合继承并重定向所有必要的调用?这会充分解决依赖关系吗?
    • @ashes999 我不能 100% 确定您的建议(请随时编辑问题以澄清),但我认为您在问“如果我添加 Xna.Game 类型的成员会怎样我自己的游戏课?”如果是这样,那么您还没有删除依赖项,因为要创建 A,您仍然需要在加载自定义 Type 时加载 Xna.Game Type。
    • 我想我明白你在说什么。在 Java 中,您通过将引用的 JAR 的副本添加到项目中来“添加引用”。在 .NET 中,引用不是这样工作的。这就是您需要 DLL 的原因。您可以在没有引用的 DLL 的情况下构建和部署 DLL。
    【解决方案2】:

    您还需要在 B 中添加对 XNA 框架的依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2020-02-20
      相关资源
      最近更新 更多