2015-08-21 162 views
11

在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,以解释锁定。

+1

我的水晶球说它实际上是锁定的PDB文件。 –

+0

有趣的建议,但从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

回答

19

我有同样的问题。我改变了我的VS2015的设置,似乎这个问题已经一去不复返了:

  • 禁用选项\调试\编辑从TFS继续
  • -Options \ Sourcecodemanagement到无 -
  • -disabled选项\调试\ Diagnostictools while debugging-

不确定这是否导致锁定,但我怀疑在VS2013中没有的诊断工具。 (这些设置名称,我从德国翻译成英文,不知道这是否是他们究竟是如何在英文名为VS版本)。

编辑: 作为研究的谢伊是编辑 - 和 - 继续锁定DLL的功能。

+0

谢谢!禁用“选项\调试\编辑并继续”为我解决了这个问题。 – Shea

+0

我的VS2015没有名为“编辑并继续”的设置! – JerryGoyal

+1

@JerryGoyal当你通过快速启动搜索它时(他们应该明确地解决这个问题),但是如果你打开Debugging,你可以找到它。 –

0

我有同样的问题,并没有其他的推荐方案,我碰到同时搜索interwebs为我工作的。最后,在“修复”Visual Studio 2015 Enterprise后,我尝试以安全模式启动Visual Studio:devenv.exe/SafeMode

在安全模式下,我终于可以构建我的解决方案,准备关闭延期一个接一个,直到我找到哪一个是罪魁祸首。幸运的是,这是不必要的,随后的构建顺利进行。

2
在我的情况

这是“熊猫免费杀毒”谁在看的“C”项目的DLL和这引起了错误:

“因为它正由另一个进程的进程无法访问文件”
+0

我在调试c#web应用程序并禁用“Panda free Antivirus”时遇到了同样的问题解决了它 –

0

在我的情况下,.pdb文件被锁定。这与调试时应该锁定的.exe不同。

假设它只是.pdb,只需将其移动到一个新文件夹(我拖放)。奇怪的是,它不能被删除,但它肯定会被移动!一旦.pdb文件消失,程序集就能够再次编译。

替代解决方案(可能最不方便)涉及完全关闭项目,然后再次打开(.pdb文件奇迹般地解锁!)。

编辑: 发生第二次后,移动文件不起作用;似乎重新启动项目是唯一可靠的方法。