c++ - Visual Studio 2013 无法从网络共享构建

标签 c++ visual-studio

我在 Mac 上有一个项目,我正在尝试通过网络共享在 PC 上构建该项目。

但是 Visual Studio 报告:

1>LINK : fatal error LNK1201: error writing to program database 'X:\XYZ\Builds\VisualStudio2013\Debug\XYZ.pdb'; check for insufficient disk space, invalid path, or insufficient privilege

然而:

>dir XYZ.pdb
 Directory of X:\XYZ\Builds\VisualStudio2013\Debug
20/04/2015  17:32         9,456,640 XYZ.pdb
               0 Dir(s)  15,825,752,064 bytes free

它就是这样,由 VisualStudio 一秒钟前创建的,因此它必须具有写入权限并且有足够的磁盘空间。我检查了权限,但看不出有什么问题。

关于如何进行这项工作有什么建议吗?这会非常方便!

编辑:我已将 mac 上的 SMB 升级到最新版本,但这也没有帮助!

最佳答案

tl;dr 尝试将 veto oplock files 设置添加到您的 smb.conf,该设置按照说明指定 VS 解决方案的 .pdb 文件 here .


一种可能性是,假定的权限缺乏是由于 Visual Studio 本身多次尝试打开该文件造成的。在网络共享上构建时,即使网络共享在 Windows 服务器上运行,我也曾在 Visual Studio 中看到过类似的奇怪问题。但是,在 Windows Server 上,这种情况下会出现超时(默认为 35 秒),之后将允许打开第​​二个文件句柄,然后继续处理其业务。我最终不得不观察 SMB 流量的 Wireshark 跟踪来弄清楚那里发生了什么。

IIRC,交流过程如下:

  1. VS 打开 .pdb 的句柄。默认情况下,它接收独占访问权限,因为它是当时打开该文件的唯一句柄。

  2. VS 尝试打开 .pdb 的第二个句柄,但它当前已打开以供独占访问。

  3. SMB服务器发送消息询问持有第一个句柄(也恰好是VS)的客户端是否可以将该句柄切换到共享访问模式。

  4. VS 无法响应服务器的请求,因为它正在等待服务器对其打开第二个句柄的请求的响应。

  5. SMB 服务器超时,之后会强制将句柄切换到共享模式。 Windows SMB/CIFS 服务器上默认启用此超时。

  6. SMB 服务器现在允许打开第​​二个文件句柄,VS 继续其快乐的方式。

这种行为称为“机会锁定”,Microsoft 有一份有关如何在 Windows 文件服务器上配置它的文档 hereOplockBreakWait 是服务器等待客户端响应 oplock 中断请求的时间(以秒为单位)。

但是,听起来您的 samba 实现上可能不会发生 oplock 中断请求超时。有一个文档here在 samba 的文档中,了解如何在 samba 中配置机会锁。它提到了一个可以在 smb.conf 中指定的选项,称为 veto oplock files,它允许您指定将禁用 oplocking 的某些文件。 您可以尝试将 .pdb 添加到 smb.conf 中的veto oplock files 设置,看看这是否可以解决您的问题。

顺便说一句,上面链接的 samba 文档提到它的默认 oplock 中断等待时间是 0,我认为这会禁用超时,从而导致您看到的行为。不幸的是,该文档中与 oplock 中断等待时间选项的实际文档的链接已损坏,因此我无法确定它的作用。根据链接的 samba 文档,“Samba 建议:“除非您已阅读并理解 Samba oplock 代码,否则不要更改此参数”, 因此您最好尝试修改 否决 oplock 文件oplock 中断等待时间 除非阅读 samba 源代码是您的乐趣。 :)

关于c++ - Visual Studio 2013 无法从网络共享构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753569/

相关文章:

c++ - 单例析构函数没有被调用?

c++ - 在 C++ 生成器中使用 hashlib++ 时出错?

visual-studio - 适用于 Android 的 Visual Studio Emulator 在安装设备配置文件时挂起

c# - 使用 C# 抓取由 JavaScript 生成的网页

wpf - 如何手动重新加载 WPF 的 Visual Studio 设计器

c++ - strcoll 中的 Unicode 规范化

c++ - 无锁同步

c++ - 线程类不能正常工作

git - 在Visual Studio Professional 2017中提交一个文件

multithreading - 单元测试时如何处理其他线程中引发的异常?