我正在尝试通过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。
答案 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
祝你好运!