在 .Net Core 应用程序中使用 SharePoint CSOM

Posted

技术标签:

【中文标题】在 .Net Core 应用程序中使用 SharePoint CSOM【英文标题】:Using SharePoint CSOM inside .Net Core application 【发布时间】:2017-06-30 10:12:17 【问题描述】:

我想通过 .Net Core MVC 应用程序上的 CSOM 库从 SharePoint 列表中获取数据。在 .Net Framework 应用程序上实现这一点绝对没有问题,因为 Microsoft.SharePoint.Client 库包含 ExecuteQuery 方法。不幸的是,.Net Core 等价物不是。

我已经做了异步函数

public async Task<ActionResult> GetRequests()
    
        ClientContext context = new ClientContext("https://xxx/sites/xxx/");
        List certificatesList = context.Web.Lists.GetByTitle("Items");
        CamlQuery query = CamlQuery.CreateAllItemsQuery(100);
        ListItemCollection items = certificatesList.GetItems(query);
        context.Load(items);
        Task spTask = context.ExecuteQueryAsync();
        await Task.WhenAll(spTask);
        var result = items;
        ...

    

但它似乎也无法在 .Net Core 上运行,因为它会抛出

抛出异常:>System.Private.CoreLib.ni.dll 中的“System.InvalidOperationException”

附加信息:找不到平台服务库。为了 Windows 应用商店应用程序,请包括 Microsoft.SharePoint.Client.Runtime.WindowsStore.dll 在 应用程序包。对于 Windows Phone 应用程序,请包括 Microsoft.SharePoint.Client.Runtime.WindowsPhone.dll 在 应用程序包。对于 Windows 应用程序,请安装 GAC 中的 Microsoft.SharePoint.Client.Runtime.Windows.dll(全局 程序集缓存)或使其可用于 Windows 应用程序。

有人在 .Net Core 中使用 CSOM 还是我应该使用 REST Api 代替?

  "frameworks": 
    "netcoreapp1.0": 
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    
  

【问题讨论】:

如果它完全支持.NET Standard,我会更加惊讶。你有没有在你的 project.json 中做一些“时髦”的东西,比如玩/滥用imports 部分?或者包括Microsoft.SharePoint.Client.Runtime.WindowsStore.dll(如果它针对portable-net451+win81?如果你在VS2017上,请发布你的project.json或.csproj 我已经附加了 project.json "Imports" 节点。问题是 Microsoft.SharePoint.Client 引用在 .Net Core 应用程序上与在 .Net Framework 应用程序上完全不同。所有 dll 都相似,但名称中包含“Portable”,所以我没有 Microsoft.SharePoint.Client.Runtime.dll 但 Microsoft.SharePoint.Client.Runtime.Portable.dll 添加Microsoft.SharePoint.Client.Runtime.WindowsStore 没有帮助?它不在nuget上,至少没有官方包,所以我看不到它支持的确切目标。但是 if Microsoft.SharePoint.Client.Runtime.WindowsStore 不使用任何 WindowsPhone 特定的 api(并且只针对 portable-net451+81 配置文件,它应该仍然可以工作)。 portable-net451-win81 是在桌面和 windows mobile/uwp 上运行的可移植类库的配置文件 【参考方案1】:

我遇到了这个问题。出于某种原因,当您引用 Microsoft.SharePointOnline.CSOM nuget 包时,它使用 .net 框架 dll 而不是 netcore45 dll。 以下是我为解决此问题所做的工作:

    下载nuget包https://www.nuget.org/packages/Microsoft.SharePointOnline.CSOM/ 将其解压缩到项目中的子文件夹,例如;依赖项

    引用正确的程序集

    netcore45\Microsoft.SharePoint.Client.Portable.dll netcore45\Microsoft.SharePoint.Client.Runtime.Portable.dll net45\Microsoft.SharePoint.Client.Runtime.Windows.dll netcore45\Microsoft.SharePoint.Client.Runtime.WindowsStore.dll

哦,如果您已经拥有该 nuget 包,请在其上执行卸载包。

【讨论】:

以上是关于在 .Net Core 应用程序中使用 SharePoint CSOM的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Pipelines 上构建 .NET Core 3.0

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用AutoMapper进行实体映射

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

如何使用 EF Core 在 ASP.NET Core 中取消应用迁移

asp.net core中托管SPA应用