1
/* Make some changes to .csproj file */
...
Workspace workspace    = GetWorkspace( localBranchPath, serverBranchPath );
workspace.PendEdit( csprojFilePath );

此时,我的 VersionControlServer 非致命错误处理程序捕获了 ItemNotFound 错误。但是,如果我workspace.PendEdit( csprojFilePath + ".balls" )在 Visual Studio 调试器的 Watch 窗口中运行,则不会发生错误并且文件已正确签出。

我已确认该文件未标记为只读,并且运行 IIS / 应用程序部署的用户和被模拟的用户都具有对 .csproj 文件的 NTFS 和 TFS 完全控制权限。

4

2 回答 2

1

TFS 及其“工作区”概念可能是您遇到麻烦的原因。如果机器上有超过 1 个工作区,可能会发生奇怪的事情。您可以记录在 IIS 中运行应用程序时获取的工作区吗?它可能与 Visual Studio 自动为您创建并在您从 VS 运行时获取/使用的那个不同(或根本没有!)。

编辑:当我是一名“构建工程师”时,我从工作中想起了一些事情:TFS 为每个用户创建工作区,并将这些工作区缓存在一个文件夹中的 xml 文件中,以便快速访问,例如 C:\Users[sepcific user]\AppData\Local\微软\团队基金会 ... . 检查那个 xml 文件。因此,我很确定您的 IIS 应用程序池在其下运行的用户无法看到您在其下运行 VS 的普通用户工作区。尝试将您自己的用户设置为 IIS 应用程序池用户,看看会发生什么。很肯定会像在 Visual Studio 中一样工作。所以映射工作区*user 是非常具体的——您可能需要为您的 IIS 帐户创建一个新的工作区,并且可能还需要下载文件。


其他可能性:权限问题或 IIS 机器看不到您需要查看的(网络?)文件夹。

以运行 IIS 上的应用程序池的用户身份启动 Visual Studio(在 Windows 7 中按住shift并右键单击以查看以不同用户身份运行的选项)并查看是否可以获得相同的异常。如果你这样做,这是一个权限问题。

如果您没有收到相同的错误,请从运行您的应用程序的托管位置转到 IIS 服务器,并尝试访问该路径,就像您的应用程序可以访问它一样。

于 2012-11-14T05:41:07.220 回答
0

结果发现我的代码有两个问题(可以预见,.csproj 扩展名与它无关):

  1. 在 .csproj 之前,我一直在签入不同的文件;尽管我最初递归设置了非只读+完全控制,但这会自动重新设置所有内容的只读属性,这显然导致了我随后的签出尝试出现问题。

  2. 在某些情况下,无论是因为冲突还是其他原因,我都需要在修改和签出 .csproj 文件之前强制获取最新(GetOptions.Overwrite)。

于 2012-11-15T08:57:05.930 回答