ILMerge with CRM插件和Sharepoint Online

时间:2018-02-16 16:11:26

标签: sharepoint dynamics-crm sharepoint-online dynamics-crm-online ilmerge

我正在尝试通过nuget将ILMerge合并到我的插件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

代码成功地逐步创建了' ClientContext()'它位于Microsoft.SharePoint.Client dll中,但在到达新的SharePointCredentials()'在Microsoft.SharePoint.Client.Runtime dll。

中保留的行
    using (var srcContext = new ClientContext(url))
    {
        srcContext.Credentials = new SharePointOnlineCredentials(username, securePassword);

我被困在为什么会发生这种情况。它是Dynamics 365在线和SharePoint在线。提供给构造函数的凭据是正确的。任何指针都将非常感激。我真的不想创建一个Web服务而不是ILMerging SharePoint dll。

2 个答案:

答案 0 :(得分:3)

这几乎无疑与要求Dynamics 365 Online不允许的权限的方法相关。这通常是在Dynamics 365 Online中运行的插件/工作中出现System.Security.Permissions.SecurityPermission错误的原因。

这已经很长时间了,但是如果内存正确地为我服务,则SharePoint客户端库在Dynamics 365沙箱插件中不起作用(并且所有在线插件都在沙箱中。)

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

答案 1 :(得分:2)

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

这是Sandbox的一个限制,在微软处理这个问题之前我们无能为力。

但目前,最好的方法是按照此处的说明执行oldschool httprequests:https://code.msdn.microsoft.com/SharePoint-Integration-c5f21604

祝你好运!