我将一个 lib DLL 文件用于我从一个项目推到另一个项目的许多常用代码。每当我的一个项目需要新功能时,我都会抓取并编译最新版本的 lib DLL 源代码,然后MyCommonLib\bin\Release\MyCommonLib.dll
从MyProject\lib
.
如果我立即运行程序,我发现它仍在使用旧版本的 DLL!该文件不应该被覆盖的副本删除吗?我需要Build All
在我的解决方案上让它识别新的 DLL。
您需要确保将 DLL 复制到用作启动项目的项目的 bin 文件夹中。
通过构建启动项目,这应该将引用的 DLL 复制到解决方案中主项目的 bin 文件夹中。
如果不是这种情况,您可能需要为启动项目编写一个构建后步骤,将它需要的所有 DLL 复制到其 bin 文件夹中。
希望这可以帮助。
所以基本问题是复制过程,特别是对于静态引用的程序集,如果项目没有更改(即不需要重建),则不会发生复制过程,这就是为什么如果您立即运行您仍然看到旧版本的原因。
您可以通过添加构建后事件来复制文件来规避这种情况,因此无论项目是否需要重建,它都会触发。
在 Visual Studio 的引用列表中,单击“属性”并检查“复制本地”属性。这是解释。如果您可以将该库放入 GAC 并在您进行任何更改时更新 GAC,显然您不需要重建(复制),因为您的应用程序无论如何都会将其解析为 GAC。如果它不在 GAC 中,从技术上讲,您仍然可以将“复制本地”设置为 false 并订阅 AppDomain.AssemblyResolve 事件以手动解析 lib dll。但随后您将面临更复杂的部署场景。通常人们只使用默认的“复制本地”值 - false 将 lib dll 复制到输出文件夹。