在 .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当中应用)