每当我试图复制4个文件到我的bin文件夹,停止主服务后,我得到一个文件(TexteDll)错误。错误是:

Cannot copy TexteDll: The requested operation cannot be performed on a file 
with a user-mapped section open

这可能是由于一些系统锁定。或者另一个进程正在使用这个DLL。当我在谷歌上搜索时,我发现重新启动系统可以解决这个问题。

有人能给出原因或者解决办法吗?我检查了TexteDll的属性(通用、版本、安全性等)。一切都很正常。


当前回答

Andrew Cuthbert在2016年指出,git diff也会锁定文件,直到你退出它。

git diff仍然如此,但对于git 2.23(2019年第三季度),对于外部diff工具(正如Burkart在评论中报道的那样),情况将不再如此。

参见Johannes Schindelin (dscho)的commit 3aef54e(2019年7月11日)。 (由Junio C Hamano - gitster -在commit d9beb46中合并,2019年7月25日)

Diff:运行外部Diff前的munmap()文件内容

When running an external diff from, say, a diff tool, it is safe to assume that we want to write the files in question. On Windows, that means that there cannot be any other process holding an open handle to said files, or even just a mapped region. So let's make sure that git diff itself is not holding any open handle to the files in question. In fact, we will just release the file pair right away, as the external diff uses the files we just wrote, so we do not need to hold the file contents in memory anymore. This fixes git-for-windows#1315


运行“git diff”(man),同时允许外部diff处于未合并路径的状态,用于段错误,这已在git 2.30 (Q1 2021)中得到纠正。

参见Jinoh Kang (iamahuman)的commit d668518, commit 2469593(2020年11月6日)。 (由Junio C Hamano - gitster -在commit d5e3532中合并,2020年11月21日)

diff:允许传入NULL到diff_free_filespec_data() 签署人:Jinoh Kang 署名:Junio C Hamano

Commit 3aef54e8b8(“diff: munmap()文件内容在运行外部diff之前”,Git v2.22.1)引入了对run_external_diff中的diff_free_filespec_data的调用,该调用可能传递NULL指针。 通过将diff_free_filespec_data(NULL)设置为no-op来修复此问题并防止将来出现任何此类错误。 修复:3aef54e8b8(“diff: munmap()文件内容在运行外部diff之前”)

其他回答

在我的例子中,是资源管理器锁定了调试文件夹中编译的DLL…很奇怪,不是吗?

我是用一个叫解锁的工具发现的。

必须用Unlocker删除,即使它说文件没有锁,我不能删除文件夹,直到我不删除那个文件……

之后,它进行了编译。

编辑:

我发现了为什么在我的案例中会发生这种情况。我在Visual Studio的文本编辑器中打开了DLL…

以上都没有解决这个问题。

有人在我的解决方案集中有一个项目在构建配置中使用x64 CPU。将其更改为Any CPU会导致构建使用新文件夹。我仍然不知道哪个进程对那个文件有锁。

我的解决方案是关闭所有VS实例,并杀死任何挂起的devenv.exe进程。

Andrew Cuthbert在2016年指出,git diff也会锁定文件,直到你退出它。

git diff仍然如此,但对于git 2.23(2019年第三季度),对于外部diff工具(正如Burkart在评论中报道的那样),情况将不再如此。

参见Johannes Schindelin (dscho)的commit 3aef54e(2019年7月11日)。 (由Junio C Hamano - gitster -在commit d9beb46中合并,2019年7月25日)

Diff:运行外部Diff前的munmap()文件内容

When running an external diff from, say, a diff tool, it is safe to assume that we want to write the files in question. On Windows, that means that there cannot be any other process holding an open handle to said files, or even just a mapped region. So let's make sure that git diff itself is not holding any open handle to the files in question. In fact, we will just release the file pair right away, as the external diff uses the files we just wrote, so we do not need to hold the file contents in memory anymore. This fixes git-for-windows#1315


运行“git diff”(man),同时允许外部diff处于未合并路径的状态,用于段错误,这已在git 2.30 (Q1 2021)中得到纠正。

参见Jinoh Kang (iamahuman)的commit d668518, commit 2469593(2020年11月6日)。 (由Junio C Hamano - gitster -在commit d5e3532中合并,2020年11月21日)

diff:允许传入NULL到diff_free_filespec_data() 签署人:Jinoh Kang 署名:Junio C Hamano

Commit 3aef54e8b8(“diff: munmap()文件内容在运行外部diff之前”,Git v2.22.1)引入了对run_external_diff中的diff_free_filespec_data的调用,该调用可能传递NULL指针。 通过将diff_free_filespec_data(NULL)设置为no-op来修复此问题并防止将来出现任何此类错误。 修复:3aef54e8b8(“diff: munmap()文件内容在运行外部diff之前”)

如果你正在使用像AQ Time这样的分析器,它们也可能会锁定文件。在这种情况下,解决方案是重新启动分析器或简单地从分析器卸载/加载相关程序集。 对于AQ时间,我注意到它在一段时间后释放文件,但我不能告诉我的生活超时是什么。 似乎是随机的