【问题标题】:How does visual studio know my DLL needs to be copiedVisual Studio 如何知道我的 DLL 需要被复制
【发布时间】:2014-12-17 11:47:23
【问题描述】:

我们的解决方案有一个“Lib”文件夹,其中包含存储在源代码管理中的 DLL(“A.dll”)。

我的项目如下所示(简化):

Website
- References
-  * Reference to A.dll from Lib folder below *
- Content
- Lib
-   A.dll (Build Action: Content, Copy to Output: Do not copy)
-   B.dll (Build Action: Content, Copy to Output: Do not copy)
- Migrations
- Views

A 引用/使用了 B,但 B 未作为引用包含在网站内。

当我点击编译时,Visual Studio 将 B 放入 bin 文件夹中,它是如何知道要这样做的?即使我将 B 留在原处,但不让网站项目看到它(不包含在项目中),它仍然放在 bin 文件夹中。

但是,如果我将 B 放在 Migrations 文件夹中,它不会被复制到 bin 文件夹中。 Lib 和 Migrations 文件夹没有针对它们的特殊属性(我可以看到)。

这是如何工作的,是否记录在案?

【问题讨论】:

  • .NET 程序集的元数据包含依赖程序集的条目。 Msbuild 读取它以确定它们是否也需要被复制。因此它认为 B 是 A 的依赖项。如果找到该文件,则将其复制。如果不是,则它静默跳过副本。
  • 它是如何知道在 Lib 文件夹中查找的?只是恰好是 A 放置的位置,而不是 A 最初编译到的位置。
  • 来自您添加的参考。 A 引用的<HintPath> 属性指向 Lib 文件夹。
  • 就是这样找到A的,难道只是用A的hintpath找到B吗?
  • 它在找到 A 的同一目录中查找。

标签: c# visual-studio-2013 compilation dll-reference


【解决方案1】:

根据 cmets,解释说它在实例中工作的原因是因为它在找到 A 的同一位置搜索 B。

由于这有助于我的理解,我将其发布为答案,以防其他人使用。

感谢汉斯的帮助。

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多