如何防止Visual Studio锁定bin目录中的xml文档文件?

Ste*_*ing 17 msbuild locking xml-documentation

我的visual studio解决方案包括Web应用程序和单元测试应用程序.我的Web应用程序使用log4net.我希望能够从命令行使用msbuild来构建我的解决方案.但是,每当我从命令行构建解决方案时,我都会遇到构建错误,因为它无法将log4net.xml复制到测试项目的bin目录中.

错误消息是:

"无法将文件'\ bin\log4net.xml'复制到'bin\Debug\log4net.xml'.拒绝访问路径'\ bin\log4net.xml'."

看起来Visual Studio正在锁定此文件,但我无法弄清楚它为什么需要.有没有办法阻止VS在已加载的项目中锁定XML文档文件?

小智 8

我找到了以下解决方案:在VS postbuild事件或NAnt/MSbuild脚本中执行cmd脚本

handle.exe -p devenv [Path to the folder with locked files] > handles.txt

FOR /F "skip=5 tokens=3,4 delims=: " %%i IN (handles.txt) DO handle -p %%i -c %%j -y
Run Code Online (Sandbox Code Playgroud)

handle.exe可在此处获得http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

脚本的第一行转储到handles.txt由VS第二行锁定的文件的所有句柄从文件中读取句柄ID并终止句柄

脚本执行后,可以删除/替换/移动文件等


Kev*_*ler 1

我在使用 Visual Studio 时也遇到过这个问题。我们使用 NAnt 而不是 MSBuild,但问题是一样的。我可以通过修改构建文件来忽略复制 xml 文档时的失败来解决这个问题。

请注意,这实际上并没有解决原始问题,因为 xml 文件仍然被锁定,但这种解决方法对我们来说已经足够好了,因为 xml 文档的实际内容并不经常更改。