如何在 azure function v1 中使用最新的 SharePoint PnP Core Online

How to use latest SharePoint PnP Core Online in azure function v1

我只是按照以下说明操作:

https://github.com/Azure/azure-functions-vs-build-sdk

尝试添加新版本的 newtonsoft.json,然后安装了最新的 SharePointPnPCoreOnline。 它在我的项目中运行良好,而且我可以在本地对我的事件网格触发器进行单元测试。 但是在我部署到 azure 之后,一个错误 happen.It 似乎函数没有加载正确的 DLL

Method not found: 'Newtonsoft.Json.Linq.JObject Microsoft.Azure.WebJobs.Extensions.EventGrid.EventGridEvent.get_Data()'.    

并在出错时执行这段代码

 [FunctionName("ProcessRequest")]
        [Obsolete]
        public static void Run([EventGridTrigger] string eventGridEvent, TraceWriter log)
        {
            EventGridEvent eventGridEventData = JsonConvert.DeserializeObject<EventGridEvent>(eventGridEvent);
            var siteCreationInfo = eventGridEventData.Data.ToObject<SiteRequest>();
}

对这个问题非常困惑,并提出了所有解决方案,但找不到方法。

The solution to overcoming this issue is by first manually installing a newer version of Newtonsoft.Json via NuGet.

检查参考文献。

我的测试项目,它有警告,但代码运行成功。

string webTitle = string.Empty;
            JObject jObject = JObject.Parse(@"{
                  'CPU': 'Intel',
                  'Drives': [
                    'DVD read/writer',
                    '500 gigabyte hard drive'
                  ]
                }");
            try
            {
                //Create the client context  
                using (var clientContext = authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(authArray[0], authArray[1], authArray[2]))
                {
                    var web = clientContext.Web;
                    clientContext.Load(web);
                    clientContext.ExecuteQuery();
                    Console.WriteLine(web.Title);
                    webTitle = web.Title;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception : " + ex.Message);
                webTitle = ex.Message;
            }

            return req.CreateResponse(HttpStatusCode.OK, "Hello " + webTitle+ jObject["CPU"]);

在这种情况下,如果我们必须同时使用这两个库,似乎我们无法将对象直接转换为 eventgrid 对象。

EventGridEvent eventGridEventData = eventGridEvent.ToObject<EventGridEvent>();

由于库冲突,我们不能直接使用这个函数。 我们应该分别获取键和值:

JObject eventGridData = JObject.Parse(eventGridEvent);
        var eventId = eventGridData["id"];
        var siteData = eventGridData["data"];

我们应该以简单的方式进行数据转换