【问题标题】:FileNotFoundException with the SPSite constructor带有 SPSite 构造函数的 FileNotFoundException
【发布时间】:2010-09-20 22:38:28
【问题描述】:

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

但是,无论我想做什么,我都无法创建SPSite 的实例。它总是抛出一个FileNotFoundException

有人有想法吗?

堆栈跟踪:

在 Microsoft.SharePoint.SPSite..ctor(SPFarm 农场,Uri requestUri,布尔值 contextSite, SPUserToken userToken)
在 Microsoft.SharePoint.SPSite..ctor(字符串 请求网址)在 MyCompanyName.Service.HelperClass.GetItemStateInSharePoint(SharePointItem 项目)在 C:\Workspaces\MyCompanyName\Development\Main\MyCompanyName.SharePoint\Service\HelperClass.cs:line 555

另一个附注...我有一个 Web 应用程序 + 网站集,我可以通过浏览器毫无问题地访问它。

【问题讨论】:

  • 你可以把你的堆栈跟踪吗?
  • 我解决了我的问题,但我不知道是什么原因造成的。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在我的情况下,这绝对是我登录 Windows 的帐户的权限问题。

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

    获取 SPSite 'http://yoursite/yourcollection'

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

    如果它有效,那么您知道您以前的帐户存在权限问题。要解决此问题,请在同一 shell 窗口中运行此命令并提供您要在 VS 中使用的帐户:

    添加-SPShellAdmin -用户名域\用户

    【讨论】:

    • 我不喜欢 SharePoint 的另一个原因。无处不在的黑魔法。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      切换到 NUnit 可能不是每个人的选择。
      就我而言,问题是我在 64 位服务器上,我检查了任何 CPU(所以它选择了正确的版本)但我的测试设置设置为“强制测试在 32 位进程中运行”(GAH! )

      在 MSTest 中,转到 TEst->Edit Test Settings->Trace and Test Impact。
      选择主机。
      确保您运行的是正确的版本。

      这是我的 VS2010 SP1,MSTest 清单。

      • 您需要 SP1,以便您可以针对 .NET 3.5 进行测试。它不适用于 .NET 4.0
      • 确保站点加载 - 我直接从 VS2010 编辑器启动站点,因为它是一个超链接
      • 验证构建设置。如果服务器是 64 位,则选择 64 位。
      • 就我而言,我有一个 64 位服务器,但选择 x64 会失败!这是我的第一个线索。
      • 验证测试设置是否支持正确的位。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          SharePoint 2010 上存在同样的问题。但是问题出在我们的 Web 服务上,它正在访问 SharePoint 对象模型。运行此服务的应用程序池应该是场管理员。

          【讨论】:

            【解决方案7】:

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

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

            希望对你有帮助!

            【讨论】:

              【解决方案8】:

              我遇到了同样的问题。我想用我的用户 ID 运行控制台应用程序。我是 Web 应用程序所有者 + Farm 管理员。仍然无法运行应用程序。

              问题已由

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

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

              【讨论】:

                【解决方案9】:

                如果它是访问 SharePoint 2010 的控制台应用程序,请确保项目的构建目标是 x64 并且 .NET Framework 是 3.5。

                【讨论】:

                  【解决方案10】:

                  这个问题更多的是用户权限问题给予以下权限

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

                  Sharepoint Server --- 添加到 WSS_ADMIN_WPG 组

                  数据库 --- Sharepoint 内容数据库(网站集数据库)- db_owner 权限 Sharepoint Config DB(sharepoint安装的Config DB)--db_owner权限

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

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

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                    • 这对我也有用。谢谢查理数码。像往常一样,SharePoint 会给出一个非常无用的错误消息。
                    【解决方案12】:

                    我有类似的问题。

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

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

                    【讨论】:

                      【解决方案13】:

                      x64 问题上的 MSTest 对我来说是这个问题的原因。在控制台应用中工作。

                      【讨论】:

                        【解决方案14】:

                        阅读此站点http://community.bamboosolutions.com/forums/t/8179.aspx 如果您正在运行您的 OS x64 位并使用 MSTest(32 位),它将失败,使用 nunit 可以工作!!!

                        【讨论】:

                        • 这原来是我的问题。你需要仔细检查每个项目的 CPU 配置,它可能有点晦涩。
                        【解决方案15】:

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

                        希望对你有帮助。

                        【讨论】:

                          【解决方案16】:

                          我最近发现构造函数的这个问题可能是由构造函数的错误行为引起的。
                          我正在考虑 MOSS 2007。 当您将完整的站点 URL 传递给构造函数时,它似乎只考虑 URL 的站点部分,选择在 Web 应用程序选择器控件中“当前选择”的 Web 应用程序。
                          因此,例如,当您调用

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

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

                          【讨论】:

                            【解决方案17】:

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

                            【讨论】:

                            • 我尝试直接从备用访问映射部分复制/粘贴字符串。
                            【解决方案18】:

                            当 SharePoint 无法在 SharePoint 配置数据库中找到请求的网站集时,会引发 FileNotFoundException。我的猜测是您尚未在 URL 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 或打开管理中心并创建一个新的网站集。

                            【讨论】:

                            • 我有一个可以通过浏览器访问的 Web 应用程序 + 网站集。
                            • 嗯,那可能是权限问题。尝试使用与应用程序池相同的凭据而不是网站集管理员运行您的应用程序。否则问题也可能是因为您的 SharePoint 是 64 位,但您的应用程序在 32 位模式下运行。
                            • @iaf :这是一个权限问题。如果您使用 SharePoint 的“未知”用户运行 EXE,则该用户需要是内容 DB + Farm Admin + Site Collection Admin 的 dbo。就这样。 :)
                            • 我的问题是我正在调用 64 位 SharePoint 2010 程序集,但在 32 位进程中运行。谢谢@lars-fastrup!
                            【解决方案19】:

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

                            在你的 12 个蜂巢中寻找日志。如果您的日志设置正确,您将丢失该文件。

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

                            【讨论】:

                              【解决方案20】:

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

                              我的问题的解决方案是在 GAC 中注册 SharePoint 12.0.0.0 程序集。听起来与您的问题不同,仅供参考。

                              【讨论】:

                              • 不。一切都在 GAC 中。
                              【解决方案21】:

                              异常的堆栈跟踪会很有帮助。

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

                              【讨论】:

                                猜你喜欢
                                • 2010-11-18
                                • 2017-08-20
                                • 1970-01-01
                                • 1970-01-01
                                • 2021-03-22
                                • 2020-10-03
                                • 1970-01-01
                                • 1970-01-01
                                • 2021-10-25
                                相关资源
                                最近更新 更多