为什么我需要在更新lib dll后重建

时间:2013-05-19 22:47:30

标签: .net dll

我使用lib DLL文件来处理我从项目到项目的许多常用代码。每当我需要在我的某个项目上使用新功能时,我会抓取并编译最新版本的lib DLL源代码,然后从MyCommonLib\bin\Release\MyCommonLib.dll复制并粘贴到MyProject\lib

如果我立即运行程序,我发现它仍在使用DLL的版本!该文件是否已被副本w / overwrite删除?我需要在我的解决方案Build All上让它识别新的DLL。

3 个答案:

答案 0 :(得分:2)

您需要确保将DLL复制到用作启动项目的项目的bin文件夹中。

通过构建启动项目,这应该将引用的DLL复制到解决方案中主项目的bin文件夹中。

如果不是这种情况,您可能需要为启动项目编写一个构建后的步骤,该步骤会将所需的所有DLL复制到其bin文件夹中。

希望这有帮助。

答案 1 :(得分:1)

所以基本问题是复制过程,特别是对于静态引用的程序集,如果项目没有改变(即不需要重建)就不会发生,所以如果你立即运行就会看到旧版本仍然。

您可以通过添加后期构建事件来复制文件来避免这种情况,因此无论项目是否需要重建,都会触发。

答案 2 :(得分:0)

在Visual Studio的引用列表中,单击“属性”,然后选中“复制本地”属性。 Here是解释。如果您可以将该lib放入GAC并在进行任何更改时更新GAC,显然您不需要重建(复制),因为您的应用程序无论如何都会将其解析为GAC。如果它不在GAC中,从技术上讲,您仍然可以将“Copy Local”设置为false并订阅AppDomain.AssemblyResolve事件以手动解析lib dll。但是,您将面临更复杂的部署方案。通常人们只使用默认的“复制本地”值 - false将lib dll复制到输出文件夹。