我有一个最近开始维护的现有项目,在更新其中一个类库所依赖的几个程序集时,我遇到了一些我不太了解的东西。
- 需要更新 2 个程序集,NuGet 最初都没有跟踪
- 程序集 A 在 NuGet 上不可用,必须手动下载和引用。我将它解压缩到我的桌面,删除了旧参考,并使用“添加参考>浏览”添加了新参考
- 程序集 B 可通过 NuGet 获得,因此我删除了旧引用,然后使用包管理器将其添加回来。
- 两个引用都将“本地复制”设置为 true
- 在为调试和发布配置构建时,dll 被复制到项目下各自的 bin 文件夹中。
- 此时,我删除了桌面上的程序集 A 的 dll,引用路径现在指向
..\solution\project\bin\Debug\assemblyA.dll
使用 Debug 配置和..\solution\project\bin\Release\assemblyA.dll
使用 Release 配置时的位置。 - 程序集 B 存在
...\solution\packages\[packagepath]\assemblyB.dll
于其各自的 Debug 和 Release bin 文件夹下,但引用路径指向 NuGet 包文件夹中的原始副本。
现在这里的事情对我来说有点模糊。就这样我对此非常清楚并且不做任何假设,我最初的澄清问题是 - 在上述情况下将 Copy Local 设置为 true 时,引用了哪个 - 原始副本或 bin/[配置] 副本?
排序后,我遇到的真正问题是,在为 Release 配置重建解决方案时,它会清除我本地的 assemblyA.dll 副本。对于调试配置,这不会发生。为什么会这样?我错过了一个设置还是这是设计使然?如果这是设计使然,为什么构建之间的行为差异以及那时复制本地设置的意义何在?