So beheben Sie den Fehler "Dynamics CRM Plugin System.Security.Permissions.FileIOPermission"
Geschäftsprozessfehler System.Security.SecurityException: Bitte um Erlaubnis vom Typ ' System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 'fehlgeschlagen. bei System.Security.CodeAccessSecurityEngine.Check (Objektanforderung, StackCrawlMark & stackMark, Boolean isPermSet) bei System.Security.CodeAccessPermission.Demand () bei System.IO.FileStream.Init (Zeichenfolgenpfad, FileMode-Modus, FileAccess-Zugriff, Int32-Rechte, Boolean useRights, FileShare-Freigabe, Int32 bufferSize, FileOptions-Optionen, SECURITY_ATTRIBUTES secAttrs, Zeichenfolge msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) bei System.IO.FileStream..ctor (Zeichenfolgenpfad, FileMode-Modus, FileAccess-Zugriff, FileShare Int32-Freigabe , FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) unter System.IO.File.InternalWriteAllBytes (String path, Byte [] bytes, Boolean checkHost) unter RetrieveAttachments.RetrieveClass.Execute (IServiceProvider) war: Anforderung Der Typ der ersten fehlgeschlagenen Berechtigung war: System.Security.Permissions.FileIOPermission Die Zone der fehlgeschlagenen Assembly war: MyComputer
Ich habe auch die folgende Methode in die AssemblyInfo.cs-Datei des Plugins eingefügt [Assembly: System.Security.AllowPartiallyTrustedCallers] aber es wird derselbe Fehler ausgelöst.
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<string>("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);
}
}