为什么我可以在PowerShell中获取SPSite但在c#中使用FileNotFound失败?

时间:2012-12-17 18:32:37

标签: c# sharepoint-2010 powershell-v2.0 filenotfoundexception spsite

我们有一个基于混合(表单和Windows)的SharePoint 2010网站,我正在尝试在c#中使用对象模型(命令行控制台应用程序,引用Microsoft.SharePoint,解决方案平台目标是x64 [在VS 2012中]我必须创建一个新的解决方案平台,从< Empty>]复制设置。)

在PowerShell中,我可以简单地执行类似

的操作
$site = Get-SPSite http://www.server.com/sites/site1

它成功检索了对象,我可以随意打开包含的SPWebs等。但是,当我在C#中尝试类似的逻辑时(在相同的用户凭据下的同一个框中),如

using(SPSite site = new SPSite("http://www.server.com/sites/site1") { }

它因FileNotFoundException而失败。任何使用相关Guids的尝试都遵循相同的问题。为什么会发生这种情况?

此外,我是该框的管理员,并且还明确地在数据库上具有sysadmin服务器角色。

2 个答案:

答案 0 :(得分:3)

我假设您在命令提示符下执行此操作?如果是这样,请确保您在x64中编译项目。这是我在x86或任何CPU中编译代码时看到的错误消息。

答案 1 :(得分:0)

对于任何体验过这种情况的人。 PowerShell 3不支持SharePoint方法。我在安装Powershell v3之后发现,在运行SharePoint命令之前,我必须首先使用命令powershell -version 2输入另一个shell,这让我意识到我的VS项目是针对.NET 4.5的;一旦我将其更改为.NET 3.5,一切正常。

我认为尽管SharePoint库以.NET 3.5为目标,理论上.NET 4 CLR可以处理.NET 2 CLR库,但使用SharePoint 2010的项目不支持以任何方式定位.NET 4 / 4.5。

当然,很高兴被证明是错的;)