ILMerge 与 CRM 插件和 Sharepoint Online

ILMerge with CRM plugin and Sharepoint Online

我正在尝试通过 nuget 使用 ILMerge 将两个 SharePoint 程序集合并到我的插件 dll 中。程序集是;

Microsoft.SharePoint.Client  (v16.1)
Microsoft.SharePoint.Client.Runtime (v16.1)

它们似乎成功地合并到我的单个插件 dll 中,如果我使用 JustDecompile 检查 dll,我可以看到所需的 类 等。

调试插件时,抛出安全异常;

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0

代码成功地跨越了位于 Microsoft.SharePoint.Client dll 中的 'ClientContext()' 的创建,但是当它到达 'new SharePointCredentials()' 行时失败,该行位于 Microsoft.SharePoint.Client.运行时 dll.

    using (var srcContext = new ClientContext(url))
    {
        srcContext.Credentials = new SharePointOnlineCredentials(username, securePassword);

我不知道为什么会这样。它是 Dynamics 365 在线和 SharePoint 在线。提供给构造函数的凭据是正确的。任何指针将不胜感激。我真的不想创建 Web 服务而不是 ILMerging SharePoint dll。

这几乎无疑与被调用的方法需要 Dynamics 365 Online 不允许的权限有关。这通常是 Dynamics 365 Online Plugin/Workfrom 运行 中出现 System.Security.Permissions.SecurityPermission 错误的原因。

已经很久了,但如果我没记错的话,SharePoint 客户端库在 Dynamics 365 沙盒插件中不起作用(所有在线插件都在沙盒中。)

除非你能找到一种方法在没有库的情况下使用 SharePoint REST API 进行调用,否则你将不得不创建一个网络服务,或者(在我看来,如果可能的话,最好的解决方案是)使用 Azure 服务总线来处理执行。

正如 Nick 所说,不幸的是 Sharepoint.client.dll 会向您抛出“System.Security.SecurityException:该程序集不允许部分信任的调用方”错误,即使您使用 ILMerge 进行部署也是如此。

这是 Sandbox 的限制,在 Microsoft 解决这个问题之前我们无能为力。

但就目前而言,最好的方法是按照此处的说明进行旧式 httprequests:https://code.msdn.microsoft.com/SharePoint-Integration-c5f21604

祝你好运!