【问题标题】:Visual Studio Reference Project/Dll'sVisual Studio 参考项目/Dll 的
【发布时间】:2013-03-18 16:34:05
【问题描述】:

如果我有订单中的项目列表。

1. Commons
2. DAL
3. BAL
4. WebUI

在上述项目中,引用应该以这种方式发生。

DAL refer's to Commons.
BAL refer's to DAL.
WebUI refer's to BAL.

那么,为什么当我从 WebUI 访问 BAL 的方法时会出错,该方法返回一个在 Commons 中定义的对象强>。因为,在一个项目依赖中,WebUI 依赖于所有三个项目。但是为了方便起见,我不想在 WebUI 项目中包含 Common,BAL,DAL 的引用。但是我想要它应该自动包含所有依赖项目的引用(如果有的话)。

谁能帮我解决一下如何摆脱 Visual Studio 的这种意外行为。

【问题讨论】:

    标签: .net winforms visual-studio architecture reference


    【解决方案1】:

    如果WebUI 使用Commons 中定义的任何 类型,则Commons 项目必须 包含作为对WebUI 项目的引用.即使该类型被用作在 WebUI 项目正在使用的不同程序集(即 BAL)中声明的方法的返回类型。

    真的没有办法解决这个问题..

    【讨论】:

    • 你不觉得,Visual Studio 应该自动处理这些项目引用层次结构吗?
    • 没有。不是真的.. 因为您可能有一个场景,WebUI 只使用一些方法,比如说 BAL,这些方法不公开或使用 Commons 中定义的任何类型。在这种情况下,您不需要参考 Commons。那么 Visual Studio 将如何为您做出决定呢?
    • 这很简单,因为在任何情况下,任何引用项目正在使用的 dll 都需要复制。那么为什么不自动引用呢?
    【解决方案2】:

    在项目中引用 DLL 并不会将 DLL 的代码包含(复制)到项目中。如果BAL 将在Commons 中定义的对象返回到WebUI,那么WebUI 也需要对Commons 的引用,以便知道返回的类型。

    如果您想解决这个问题,可以尝试使用ILMerge 将程序集合并在一起,然后引用合并的程序集。我建议在软件发布期间这样做。否则,似乎会使开发和调试变得更加繁琐。

    【讨论】:

    • 那么一团糟,如果我为架构中的每个模块创建单独的 dll,我怎么能在我的解决方案中的每个项目中添加 100 个项目引用。
    • @ManishRawat - 除非您正在构建 Office,否则在您的解决方案中包含 100 多个程序集可能是矫枉过正......只是一个想法。
    • 虽然,当我看到 WebUI 的 bin/ 文件夹时,我可以看到所有的 dll 都复制在那里。所以这意味着 Visual Studio 会自动将 dll 复制到那里,但不会自动引用它们。
    • 如果 DLL 没有被引用,VS 似乎不太可能复制它。也许这些文件是以前构建的剩余文件。尝试回收 bin 文件夹并再次构建。看看会发生什么。
    • 确实是将dll复制到bin文件夹中。看到我说的是,WebUI 仅引用 BAL,但我仍然在 WebUI bin 目录中找到了 DAL/Commons dll,这是因为 BAL 依赖于 DAL,而 DAL 依赖于 Commons。所以,它会自动复制。
    猜你喜欢
    • 2023-03-10
    • 2018-11-21
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多