Visual Studio 2013无法从网络共享生成
Visual Studio 2013 fails to build from network share
我在Mac上有一个项目,我正试图通过网络共享在PC上构建。
但是Visual Studio报告:
1>链接:致命错误LNK1201:写入程序数据库时出错"X:\XYZ\Builds\VisualStudio2013\Debug\XYZ.pdb";检查是否不足磁盘空间、无效路径或权限不足
然而:
>dir XYZ.pdb
Directory of X:XYZBuildsVisualStudio2013Debug
20/04/2015 17:32 9,456,640 XYZ.pdb
0 Dir(s) 15,825,752,064 bytes free
它是由VisualStudio一秒钟前创建的,所以它必须具有写权限,并且有足够的磁盘空间。我对权限进行了一番检查,看不出有什么问题。
关于如何使这项工作发挥作用,有什么建议吗?它会很方便!
编辑:我已经将mac上的SMB升级到了最新版本,这也没有帮助!
tl;dr尝试在smb.conf中添加一个veto oplock files
设置,该设置根据此处的说明指定VS解决方案的.pdb文件。
一种可能性是,所谓的权限不足是由于Visual Studio本身试图多次打开该文件。当在网络共享上构建时,甚至当网络共享在Windows服务器上运行时,我在Visual Studio中看到过类似这样的奇怪问题。然而,在Windows Server上,在这种情况下会有一个超时(默认为35秒),之后它将允许打开第二个文件句柄,然后继续其业务。我最终不得不观察Wireshark对SMB流量的跟踪,以了解那里发生了什么。
IIRC,交易所类似于:
-
VS打开.pdb的句柄。默认情况下,它接受独占访问,因为它是当时打开文件的唯一句柄。
-
VS试图打开.pdb的第二个句柄,但它当前已以独占方式打开。
-
SMB服务器发送一条消息,询问持有第一个句柄(恰好也是VS)的客户端是否可以将句柄切换到共享访问模式。
-
VS无法响应服务器的请求,因为它被阻止等待服务器对其打开第二个句柄的请求的响应。
-
SMB服务器上的超时过期,之后它将强制将句柄切换到共享模式。默认情况下,此超时在Windows SMB/CIFS服务器上启用。
-
SMB服务器现在允许打开第二个文件句柄,VS继续它的快乐之路。
这种行为被称为"机会锁定",微软在这里有一份关于如何在Windows文件服务器上配置它的文档。OplockBreakWait
是服务器等待客户端响应操作锁中断请求的时间(以秒为单位)。
然而,听起来可能在您的samba实现中没有发生oplock中断请求超时。samba的文档中有一个关于如何在samba中配置操作锁的文档。它提到了一个可以在smb.conf
中指定的名为veto oplock files
的选项,该选项允许您指定将禁用操作锁定的某些文件您可以尝试将.pdb添加到smb.conf
中的veto oplock files
设置中,看看这是否解决了您的问题
顺便说一句,上面链接的samba文档提到它的默认操作锁中断等待时间是0,我认为这会禁用超时,从而导致您看到的行为。不幸的是,该文档中指向oplock break wait time
选项的实际文档的链接已断开,因此我无法确定它是这样做的。根据链接的samba文档,"Samba recommends: “Do not change this parameter unless you have read and understood the Samba oplock code,”"
,所以你最好尝试修改veto oplock files
而不是oplock break wait time
,除非阅读samba的源代码是你的乐趣所在。:)
我知道这个问题的答案已经完成了,但接受的答案在我的情况下不起作用。以下是我的问题的解决方案:当项目规模增长,".pdb">文件的大小超过300MB时,就会产生错误。我更改了项目中的调试信息属性,并成功编译了它。您只需要在以下路径中将项目中的"调试信息格式"更改为"C7-compatible(/Z7)">。
配置属性>>C/C++>>常规>>调试信息格式化
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 我的神经网络不起作用 [XOR 问题]
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 在C 和QML之间共享(Q)网络通道
- 如何使用文件系统minifiter在网络共享驱动器上阻止文件覆盖
- Visual Studio 2013无法从网络共享生成
- 从网络共享中部分提取zip文件
- 为什么CreateFile无法通过网络共享打开文件
- OpenCV:在Linux进程之间共享网络摄像头是可能的吗?
- 如何在网络共享驱动器上使用sqlite3数据库?
- 如何使用Visual Studio 2010从网络共享中构建项目
- 检测未用于映射网络共享的驱动器号
- std::windows网络共享上的fstream
- 使用Win32 C++访问受保护的网络共享
- 枚举C++/MFC中的网络共享目录