使用SPSite构造函数的FileNotFoundException

时间:2008-11-05 19:22:50

标签: .net security sharepoint sharepoint-2007 sharepoint-2010

我尝试在自定义进程(MyApp.exe)中在场服务器上实例化SPSite的实例,并将其作为参数提供给整个URI(http://mysite:80/)。我还确保运行MyApp.exe的帐户为Site Collection Administrator

但是,无论我想做什么,我都无法制作SPSite的实例。它总是抛出FileNotFoundException

有人有个主意吗?

堆栈跟踪:

  

在   Microsoft.SharePoint.SPSite..ctor(SPFarm   farm,Uri requestUri,Boolean   contextSite,SPUserToken userToken)
  在   Microsoft.SharePoint.SPSite..ctor(字符串   requestUrl)at   MyCompanyName.Service.HelperClass.GetItemStateInSharePoint(SharePointItem   项目)   C:\工作区\ MyCompanyName \开发\ MAIN \ MyCompanyName.SharePoint \服务\ HelperClass.cs:行   555

另一方面说明......我有一个Web应用程序+网站集,我可以通过浏览器访问它而没有任何问题。

21 个答案:

答案 0 :(得分:14)

当SharePoint无法在SharePoint配置数据库中找到请求的网站集时,会抛出FileNotFoundException。我的猜测是您还没有在网址http://mysite:80上创建网站集。如果我尝试使用不存在的网站集的URL实例化新的SPSite对象,我会看到以下堆栈跟踪:

System.IO.FileNotFoundException : The site http://server/sites/bah could not be found in the Web application SPWebApplication 
Name=SharePoint - 80 Parent=SPWebService.
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
at Microsoft.SharePoint.SPSite..ctor(String requestUrl)

指定网站集的正确URL或打开管理中心并创建新的网站集。

答案 1 :(得分:12)

将构建属性中的平台目标更改为x64在SharePoint 2010上为我解决了此问题。

答案 2 :(得分:10)

如果你正在运行你的OS x64位并使用MSTest(32位)它会失败,请使用nunit工作!!!

答案 3 :(得分:4)

如果它是访问SharePoint 2010的控制台应用程序,则确保项目的Build Target为x64,.NET Framework为3.5。

答案 4 :(得分:3)

此问题更多是用户权限问题,提供以下权限

用户权限 SharePoint网站 ---最低读取权限

Sharepoint服务器 ---添加到WSS_ADMIN_WPG组

数据库 --- Sharepoint Content DB(网站集数据库) - db_owner权限                            Sharepoint配置数据库(共享点安装的配置数据库) - - db_owner权限

在我的博客中阅读更多内容

http://sharepointinstallation.blogspot.com/2010/12/minimal-permission-required-to-execute.html

答案 5 :(得分:2)

对象模型也可能不喜欢您提供的URL。如果您没有为其提供创建网站集的确切URL或您在备用访问映射中配置的确切URL,则会抛出可能不一定有意义的异常。在您的情况下,您可以尝试http://mysitehttp://machinename

答案 6 :(得分:1)

检查你的web.config并查看是否存在缺少文件的配置。

在12个蜂巢中查看日志。如果您的日志设置正确,则会丢失该文件。

编辑:检查您的所有DLL是否都在GAC中。检查您的web.config文件是否包含所有信息:namespace,Classname,NameSpace,Version = version_number,Culture-your_culture,PublicKeyToken = your_signed_token

答案 7 :(得分:1)

我们有同样的问题,但我熟悉不同的原因,这里有一个摘要:

  1. 您可能输入错误或以其他方式输入了错误的地址
  2. 运行该进程的用户帐户没有所需的权限,这些权限是:读取SharePoint网站的权限,以及SharePoint Config数据库和内容数据库的dbo。
  3. 在64位服务器上构建时,进程必须是64位进程(默认为64位“任何CPU”)。
  4. 该过程必须针对.NET 3.5

答案 8 :(得分:1)

您可以将项目编译目标设置为“Any CPU”。重要的是将MSTest主机进程配置为以64位运行。打开.testsettings文件,转到Hosts选项卡并设置“以64位运行测试......”

如果在此之后运行测试时VS告诉您没有,请再次删除并添加测试项目(我不知道更好的解决方法)

希望它有所帮助!

答案 9 :(得分:1)

我有同样的问题。我想用我的用户ID运行控制台应用程序。我是网络应用程序所有者+农场管理员。仍然无法运行该应用程序。

问题由

解决
  1. 将构建属性中的平台目标更改为x64

  2. 在网站设置中 - >用户和权限 - >网站集管理员有两个名字。删除了其他名称,它开始工作。

答案 10 :(得分:1)

我最近发现构造函数的这个问题可能是由构造函数的starnge行为造成的 我正在考虑MOSS 2007。 当您将完整的站点URL传递给构造函数时,它似乎只是考虑URL的站点部分,选择Web应用程序选择器控件中“当前已选中”的Web应用程序。
因此,例如,当您有“http://webapp/sites/site”且当前已选择“http://weabapp:22345”时(上次您在此类选择器中选择了它)

SPSite site = new SPSite("http://webapp/sites/site")

它尝试为“http://webapp:22345/sites/site”实际创建一个站点对象并失败。

答案 11 :(得分:1)

异常的Stacktrace会有所帮助。

我认为您可以通过在工具中禁用“仅我的代码”来了解它是什么文件以及发生了什么 - >选项 - >调试并在调试器显示异常的调用堆栈时查看filename参数(如果你当然可以调试它),或者可能在异常消息中显示名称。

答案 12 :(得分:0)

我有类似的问题。

在我的场景中,我能够从控制台应用程序创建SPSite实例,但是当另一个队友试图这样做时,应用程序抛出了与上面提到的相同的异常。

解决方案:我在Content Db服务器框中添加了另一位队友作为管理员(这可能不是每个人都可以),代码工作正常且没有错误

答案 13 :(得分:0)

x64问题上的MSTest是导致这个问题的原因。适用于控制台应用程序。

答案 14 :(得分:0)

我们几天前遇到了同样的问题,解决方案是设置应用程序,即尝试创建de SPSite对象,使用与Sharepoint的Web应用程序相同的AppPool。

希望它有所帮助。

答案 15 :(得分:0)

几个星期前,我被这个困扰了。最终,我发现无法找到的文件是SharePoint程序集本身。运行时无法通过后期绑定加载附属程序集。

我的问题的解决方案是在GAC中注册SharePoint 12.0.0.0程序集。这听起来不像是你的问题,但仅仅是我们。

答案 16 :(得分:0)

SharePoint 2010上的相同问题。但问题出在我们访问SharePoint对象模型的Web服务上。此服务应在其下运行的应用程序池应该是服务器场管理员。

答案 17 :(得分:0)

切换到NUnit可能不适合所有人 在我的情况下,问题是我在64位服务器上,我检查了任何CPU(所以它选择了正确的版本)但我的测试设置被设置为“强制测试以32位进程运行”(GAH! )

在MSTest中,转到TEst->编辑测试设置 - >跟踪和测试影响 选择主机。
确保您使用的是正确版本。 Here's what you should be picking

这是我的VS2010 SP1清单,MSTest。

  • 您需要SP1,以便可以将测试目标定位到.NET 3.5。它不适用于.NET 4.0
  • 确保网站加载 - 我直接从VS2010编辑器启动了网站,因为它是一个超链接
  • 验证构建设置。如果服务器是64位,则选择64位。
  • 在我的情况下,我有一个64位服务器,但选择x64会失败!这是我的第一个线索。
  • 验证测试设置是否支持正确的位。

答案 18 :(得分:0)

我在尝试访问Sharepoint 2010时遇到了同样的问题。

我通过将Target Framework更改为.NET 3.5来修复它.-这是Sharepoint 2010支持的版本。

答案 19 :(得分:0)

在我的情况下,这肯定是我登录到Windows的帐户的权限问题。

在以管理员身份运行的SharePoint Management Shell中尝试此命令:

Get-SPSite'http://yoursite/yourcollection'

如果出现错误,请以应用池用户或用于安装SharePoint的帐户登录SharePoint服务器,然后再次尝试上述命令。

如果有效,则表示您之前的帐户存在权限问题。要解决此问题,请在同一个shell窗口中运行此命令,并提供要在VS中使用的帐户:

Add-SPShellAdmin -UserName Domain \ User

答案 20 :(得分:0)

我遇到了同样的问题,我进行了以下更改,然后它开始工作。

  1. 将Visual Studio中的平台目标更改为x64
  2. 确保您以“管理员”模式运行Visual Studio。