我有3个C#项目A,B和C. A和B都参考C.对来自A和B的C的引用被设置为" Copy Local"暗示在C被构建到C.dll之后(在C的输出目录中),它被复制到A或B的输出目录(无论哪个被编译)
我有2个解决方案,SA和SB。 SA包含A和C,SB包含B和C.我启动了Visual Studio 2015的2个实例。我在一个实例中打开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/en-us/library/ms164926.aspx>编辑和继续允许在调试会话中进行源代码修改,并使结果生效,而无需停止调试,重新编译和重新启动调试会话(这是一个多么严重的问题)。启用该功能后,Visual Studio可能需要随时重新编译任何相关DLL,以解释锁定。
答案 0 :(得分:19)
我遇到了同样的问题。我更改了我的VS2015设置,似乎问题消失了:
不确定是否有人导致锁定,但我怀疑我在VS2013中没有的诊断工具。 (我从德语翻译成英语的设置名称,不知道它是否与英语VS版本中的名称完全相同。)
修改强> 正如Shea所研究的那样,编辑并继续功能锁定了DLL。
答案 1 :(得分:2)
在我的情况下,这是“Panda free Antivirus”谁正在观看“C”项目的dll,这导致错误:“该进程无法访问该文件,因为它正被另一个进程使用”
答案 2 :(得分:0)
我遇到了同样的问题,在搜索互联网时遇到的其他推荐解决方案都没有为我工作。最后,在“修复”Visual Studio 2015 Enterprise之后,我尝试在安全模式下启动Visual Studio:devenv.exe / SafeMode
在安全模式下,我终于可以构建我的解决方案了,当我在没有切换的情况下再次启动时,我准备逐个关闭扩展,直到找到哪一个是罪魁祸首。幸运的是,这是不必要的,随后的构建顺利完成。
答案 3 :(得分:0)
就我而言,.pdb
文件已被锁定。这与调试时应该锁定的.exe
不同。
假设它只是.pdb
,只需将其移动到一个新文件夹(我拖放)。奇怪的是,它不能被删除,但它肯定会被移动!一旦.pdb
文件消失,程序集就能够再次编译。
替代解决方案(可能最不方便)涉及完全关闭项目,然后再次打开它(.pdb
文件神奇地解锁!)。
修改强> 在第二次发生后,移动文件不起作用;看来重启项目是唯一可行的方法。