我有三个C#项目A、B和C。 A和B都引用C。从A和B对C的引用设置为“复制本地”,这意味着在将C构建为C.dll(在C的输出目录中)之后,它会被复制到A或B的输出目录中(正在编译的目录)。
我有两个解决方案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)以来,这种情况就开始发生。
我有两个解决方案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时,这变得很烦人。
谢谢。
更新
我对“编辑并继续”功能可能会导致上述行为的原因进行了一些研究,根据此页面https://msdn.microsoft.com/zh-cn/library/ms164926.aspx>,编辑并继续允许在调试会话中进行源代码修改,并使结果生效而无需停止调试、重新编译和重新启动调试会话(这肯定是一个棘手的问题)。启用该功能后,Visual Studio可能需要随时重新编译任何相关的DLL,这就解释了锁定的原因。