private PluginAssembly RegisterAssembly(FileInfo assemblyFilePath, Assembly assembly, IEnumerable <Type> pluginTypes) { // Get the isolation mode of the first attribute var firstType = Reflection.GetAttributes(pluginTypes, typeof(CrmPluginRegistrationAttribute).Name).FirstOrDefault(); if (firstType == null) { return(null); } var firstTypeAttribute = firstType.CreateFromData() as CrmPluginRegistrationAttribute; // Is there any steps to register? if (firstTypeAttribute == null) { return(null); } var assemblyProperties = assembly.GetName().FullName.Split(",= ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var assemblyName = assembly.GetName().Name; // If found then register or update it var plugin = (from p in _ctx.CreateQuery <PluginAssembly>() where p.Name == assemblyName select new PluginAssembly { Id = p.Id, Name = p.Name }).FirstOrDefault(); string assemblyBase64 = Convert.ToBase64String(File.ReadAllBytes(assemblyFilePath.FullName)); if (plugin == null) { plugin = new PluginAssembly(); } // update plugin.Content = assemblyBase64; plugin.Name = assemblyProperties[0]; plugin.Culture = assemblyProperties[4]; plugin.Version = assemblyProperties[2]; plugin.PublicKeyToken = assemblyProperties[6]; plugin.SourceType = pluginassembly_sourcetype.Database; // database plugin.IsolationMode = firstTypeAttribute.IsolationMode == IsolationModeEnum.Sandbox ? pluginassembly_isolationmode.Sandbox : pluginassembly_isolationmode.None; // 1= none, 2 = sandbox // Want to overwrite all existing plugin informaiton if (plugin.Id != Guid.Empty) { // Remove the existing plugin, because the schema might have changed _trace.WriteLine("Removing Plugin '{0}' from '{1}'", plugin.Name, assemblyFilePath.FullName); //_trace.WriteLine(PluginAssembly.EntityLogicalName); DeletePluginAssembly(plugin); } _trace.WriteLine("Registering Plugin '{0}' from '{1}'", plugin.Name, assemblyFilePath.FullName); // Create plugin.Id = _service.Create(plugin); // Add to solution if (SolutionUniqueName != null) { _trace.WriteLine("Adding Plugin '{0}' to solution '{1}'", plugin.Name, SolutionUniqueName); AddAssemblyToSolution(SolutionUniqueName, plugin); } return(plugin); }