如何解决Dynamics CRM插件System.Security.Permissions.FileIOPermission错误

业务流程错误 System.Security.SecurityException:请求类型为’ System.Security.Permissions.FileIOPermission ,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089’的权限失败。 System.Security上的System.Security.CodeAccessSecurityEngine.Check(Object demand,StackCrawlMark和stackMark,Boolean isPermSet)处于System.IO.FileStream.Init的System.Security.CodeAccessPermission.Demand()处(字符串路径,FileMode模式,FileAccess访问,Int32权限,布尔值) System.IO.FileStream..ctor中的useRights,FileShare共享,Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost)(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize ,FileOptions选项,String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost)at System.IO.File.InternalWriteAllBytes(String path,Byte [] bytes,Boolean checkHost)at RetrieveAttachments.RetrieveClass.Execute(IServiceProvider serviceProvider)失败的操作是:需要失败的第一个权限的类型是:System.Security.Permissions.FileIOPermission失败的程序集区域是:MyComputer

我还在插件AssemblyInfo.cs文件[assembly:System.Security.AllowPartiallyTrustedCallers]中添加了以下方法,但它引发了同样的错误。

QueryExpression notes = new QueryExpression { EntityName = "annotation", ColumnSet = new ColumnSet("filename", "subject", "annotationid", "documentbody","mimetype") }; notes.Criteria.AddCondition("annotationid", ConditionOperator.Equal, annotationid); EntityCollection NotesRetrieve = service.RetrieveMultiple(notes); if (NotesRetrieve != null && NotesRetrieve.Entities.Count > 0) { foreach (var note in NotesRetrieve.Entities) { string fileName = note.GetAttributeValue("filename"); string cleanFileName = string.Empty; foreach (var chr in fileName.ToCharArray().ToList()) { if(!Path.GetInvalidFileNameChars().Contains(chr)) cleanFileName = cleanFileName + chr; } FileIOPermission f = new FileIOPermission(FileIOPermissionAccess.Write, @"D:\note"); string fileLocation = Path.Combine(@"D:\note", cleanFileName); byte[] fileContent = Convert.FromBase64String(NotesRetrieve.Entities[0].Attributes["documentbody"].ToString()); System.IO.File.WriteAllBytes(fileLocation, fileContent); } } 

禁止从沙箱插件中读取文件。 尝试将隔离模式更改为无。

如果您的插件在沙箱中注册,那么这可能是问题所在。 尝试在沙箱之外注册它。 您可以在此处找到有关信任级别的信息