我正在开发一个访问Team Foundation Server 2010并创建新工作项的ASP.NET应用程序。应用程序在DefaultAppPool中运行,使用NetworkService作为标识。我收到以下错误:
[UnauthorizedAccessException: Access to the path 'Cache\v10' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +12892935
System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj) +1594
System.IO.Directory.CreateDirectory(String path) +311
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.GetDefaultCacheDirectory() +1807816
Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore.InitializeInternal() +225
问题是我使用服务帐户连接到TFS,因为此表单的用户无权在TFS中添加工作项。我已经为网络服务和特定于表单的服务帐户提供了对应用程序根目录的完全控制权。我不确定如何解决这个问题。
我们的服务器运行的是带有IIS 7的Windows Server 2008.当我从本地开发计算机以调试模式运行时,该应用程序可以正常工作。
有什么建议吗?
编辑:下面的格兰特的帖子是正确的,从我能够看到的,但我已经在我的原始帖子之前完成了这些步骤。 (这就是为什么路径是Cache \ v10而不是长C:\ Program Files ...默认路径。)我给了NetworkService帐户IIS应用程序的根文件夹的完全所有权,但我们仍然得到UnauthorizedAccessException。
我们能够通过将Cache文件夹转换为网络共享并为NetworkService提供对共享的完全访问权限来解决此问题。我不想这样做,但它现在似乎正常工作。如果有人知道我可以尝试做到这一点“正确”,我将不胜感激。
答案 0 :(得分:6)
使用工作项跟踪对象模型时,它需要磁盘上的文件夹来存储元数据缓存。
对于普通用户,这是在C:\ Users \ username \ AppData \ Local \ Microsoft \ Team Foundation \ 3.0 \ Cache下 对于网络服务,它位于C:\ ProgramData \ Microsoft \ Team Foundation \ 3.0 \ Cache
下但是,在您的情况下,网络服务似乎没有权限创建或写入该文件夹。
您有两种选择:
<appSettings><add key="WorkItemTrackingCacheRoot" value="pathtofolder"/>
更具体地说,您可以从以下代码获取文件夹的位置:
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Microsoft\Team Foundation\3.0\Cache");