在2015年锁定DLL我有3个C#项目A,B和C. A和B的参考C.从A和B到C的引用都设置为“复制本地”这意味着C被建成后,到C.dll(在C的输出目录),将被复制到A或B的输出目录(取被编译)的Visual Studio调试
我有2个解决方案,SA和SB。 SA包含A和C,SB包含B和C.我启动Visual Studio 2015的两个实例。我在一个实例中打开SA,在另一个实例中打开SB。
我发现如果我从SA启动调试(F5)A,然后(当A仍在调试时),从SB对C进行更改并尝试编译SB,则会收到编译错误,指出C .dll不能被覆盖,因为它正在被另一个进程(运行SA的devenv.exe的实例)使用。
这是因为编译C到C.dll和复制到A的输出目录后没有意义对我来说,Visual Studio中应该释放该文件上的锁。
我已经验证(通过SA模块窗口),其装载的C.dll的版本是已复制到A.
的输出目录这开始出现昨天当我开始使用Visual之一Studio 2015(而不是Visual Studio 2013)。
有没有人有任何想法?我目前的解决方案是通过CTRL-F5运行SA(启动而不调试),但是当我想在调试模式下同时运行SA和SB这成为烦人。
谢谢。
UPDATE
我做了一些研究,为什么“编辑并继续”功能可能导致所描述的行为,并根据此页https://msdn.microsoft.com/en-us/library/ms164926.aspx>编辑并继续允许一个作出修改源代码,而在调试会话并且在不停止调试,重新编译和重新启动调试会话的情况下生效(这是一个非常棘手的问题)。启用该功能后,可能需要Visual Studio随时重新编译任何依赖的DLL,以解释锁定。
我的水晶球说它实际上是锁定的PDB文件。 –
有趣的建议,但从SB的编译错误明确指出,它是锁定的DLL,并尝试从Windows资源管理器删除DLL失败。也许PDB也被锁定(虽然它也被复制到A的输出目录中)。无论哪种方式,我觉得这是从VS2013转换到VS2015导致我看到的行为,我希望有一种方法来解决它。 错误:无法打开'C:\ BUILD \ C \ x86 \ obj \ Debug \ C.dll'进行写入 - '进程无法访问文件'C:\ BUILD \ C \ x86 \ obj \ Debug \ C .dll',因为它正在被另一个进程使用。' – Shea