public static AddinInfo Load(string file) { try { byte[] buffer = File.ReadAllBytes(file); Assembly asm = Assembly.Load(buffer); if (asm != null && AddinLoader.ContainsAddin(asm)) { var info = new AddinInfo(); info.Name = asm.FullName; info.File = file; info.Assembly = asm; return(info); } else { throw new Exception("Can not load assembly."); } } catch (Exception ex) { Console.WriteLine("[Error] Not an addin file: " + file); return(null); } }
public CobaltAddin() { info = new AddinInfo(); info.Image = "/Yttrium/images/Yttrium.gif"; info.Description = "Yttrium is an experimental computer algebra architecture, implementing ideas and concepts of formal hardware engineering and digital information engineering, looking at abstract math and algebra from a different, new angle.\n\n Yttrium is connected to the other new Math.NET packages like Numerics, PreciseNumerics and SignalProcessing, and thus takes direct advantage of the optimized numerical routines."; info.FullName = "Math.Net's Yttrium"; info.ShortName = "Yttrium"; AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); }
//--- setup void Init() { CurrentScope = Scope.Create(this); AddSymbols(); foreach (var info in AddinInfo.GetAddinInfo()) { AddBuiltinFunction(info.Name, info.NumArgs, info.DataType, info.Method); } _importscope = CurrentScope.Push(); // reserve a level for imported symbols CurrentScope.IsGlobal = true; }
/// <summary> /// 将插件加载到独立的应用程序域中。 /// </summary> /// <param name="addinType">实现了 IAddin 接口的类型。</param> /// <param name="info">插件配置信息。</param> /// <returns>派生自 AddinProxy 类的实例。</returns> protected override IAddin LoadOnIsolatedAppDomain(Type addinType, AddinInfo info) { AddinProxy proxy = base.LoadOnIsolatedAppDomain(addinType, info) as AddinProxy; if (proxy != null) { WpfAddinProxy wpfProxy = proxy as WpfAddinProxy; if (wpfProxy != null) { wpfProxy.Directory = Path.GetDirectoryName(addinType.Assembly.Location); } } return(proxy); }
/// <summary> /// Removes plugin. /// </summary> /// <param name="addin">Plugin information.</param> private static void RemovePlugin(AddinInfo addin) { foreach (var installPath in addin.InstallPaths) { if (File.Exists(installPath)) { try { File.Delete(installPath); } catch (Exception e) { Log.AppendLog(LogMessageType.EXCEPTION, e.Message); } } } }
/// <summary> /// Adds plugin. /// </summary> /// <param name="addin">Plugin information.</param> private static void AddPlugin(AddinInfo addin) { for (var i = 0; i < addin.AddInPaths.Length; i++) { if (File.Exists(addin.AddInPaths[i]) && !File.Exists(addin.InstallPaths[i])) { try { File.Copy(addin.AddInPaths[i], addin.InstallPaths[i], true); } catch (Exception e) { Log.AppendLog(LogMessageType.EXCEPTION, e.Message); } } } }
/// <summary> /// 初始化环境参数 /// </summary> /// <param name="dsConfig"></param> /// <param name="assemblyFullName"></param> private void InitializationDsEnvironment(IDsConfigurationSection dsConfig, string assemblyFullName) { //#if DEBUG // Debugger.Launch(); //#endif Console.WriteLine("InitializationDsEnvironment:{0},{1}".FormatString(dsConfig.ToString(), assemblyFullName)); try { //var server; IDsEnvironment de = ParentContaioner.GetObject <IDsEnvironment>(); IList <ModuleConfigurationElement> server = (from ModuleConfigurationElement me in dsConfig.Modules where me.ModuleType.EndsWith(assemblyFullName) select me).ToList <ModuleConfigurationElement>(); Console.WriteLine("Modules:{0},server count:{0}".FormatString(dsConfig.Modules.Count, server.Count)); ModuleConfigurationElement mce = server.FirstOrDefault(); this.AddinInfo = new AddinInfo() { AddinAssemblyName = assemblyFullName, AddinNameSpace = mce.AssemblyFile.Substring(mce.AssemblyFile.LastIndexOf('/') + 1).Replace(".dll", ""), AddinName = mce.ModuleName, ConfigurationFilePath = ConfigurationFileHelper.GetAddinConfigurationFilePath(mce.AssemblyFile), AddinConfigurationEle = mce, AddinPath = PathHelper.GetFullPath(mce.AssemblyFile) }; if (de.AddinInfos.ContainsKey(AddinInfo.AddinName)) { AddinInfo addin = de.AddinInfos[AddinInfo.AddinName]; addin.ConfigurationFilePath = this.AddinInfo.ConfigurationFilePath; addin.AddinConfigurationEle = this.AddinInfo.AddinConfigurationEle; addin.AddinPath = this.AddinInfo.AddinPath; //throw new Exception("DsEnvironment中注册AddinName失败,原因是AddinName作为键值重复!"); } else { de.AddinInfos.Add(mce.ModuleName, AddinInfo); } }catch (Exception ex) { Console.WriteLine("InitializationDsEnvironment异常:{0}".FormatString(ex.StackTrace.ToString())); throw new Exception("InitializationDsEnvironment异常。", ex); } }
internal static AddinInfo ReadAddinInfo(string file) { ZipFile zfile = new ZipFile(file); try { foreach (ZipEntry ze in zfile) { if (ze.Name == "addin.info") { using (Stream s = zfile.GetInputStream(ze)) { return(AddinInfo.ReadFromAddinFile(new StreamReader(s))); } } } throw new InstallException("Addin configuration file not found in package."); } finally { zfile.Close(); } }
public static Release PublishRelease(UserModel m, SourceTag source, bool activate) { Release rel = m.GetPublishedRelease(source); if (rel != null) { m.DeleteRelease(rel); } Project p = m.GetProject(source.ProjectId); rel = new Release(); rel.ProjectId = source.ProjectId; rel.Status = p.HasFlag(ProjectFlag.AllowDirectPublish) || activate ? ReleaseStatus.PendingPublish : ReleaseStatus.PendingReview; rel.DevStatus = source.DevStatus; rel.LastChangeTime = DateTime.Now; rel.Platforms = source.Platforms; rel.TargetAppVersion = source.TargetAppVersion; rel.Version = source.AddinVersion; rel.SourceTagId = source.Id; string mpack = rel.GetFilePath(rel.PlatformsList [0]); AddinInfo ainfo = UserModel.ReadAddinInfo(mpack); rel.AddinId = Mono.Addins.Addin.GetIdName(ainfo.Id); rel.AddinName = ainfo.Name; rel.AddinDescription = ainfo.Description; m.CreateRelease(rel); if (rel.Status == ReleaseStatus.PendingPublish) { BuildService.UpdateRepositories(false); } return(rel); }
private void ListBox_Click(object sender, RoutedEventArgs e) { ButtonBase btn = (ButtonBase)e.OriginalSource; if (btn == null) { return; } AddinActivatorBase activator = btn.Tag as AddinActivatorBase; if (activator == null) { AddinInfo info = btn.DataContext as AddinInfo; if (info == null) { return; } App app = (App)Application.Current; WpfAddinManager am = (WpfAddinManager)app.AddinManager; activator = am.GetAddinActivator((WpfAddinInfo)info); btn.Tag = activator; activator.Active(); if (activator.IsActived) { activator.Launch(); Addins.Children.Add(activator.View); } } else { if (activator.IsLaunched) { activator.Close(); Addins.Children.Remove(activator.View); } } }
SourceTag UploadRelease(int projectId, HttpPostedFileBase file, byte[] fileData, string appVersion, string[] platforms) { if (platforms.Length == 0) { throw new Exception("No platform selected"); } VcsSource uploadSource = GetSources(projectId).Where(s => s.Type == "Upload").FirstOrDefault(); if (uploadSource == null) { uploadSource = new VcsSource(); uploadSource.ProjectId = projectId; uploadSource.Type = "Upload"; db.InsertObject(uploadSource); } SourceTag st = new SourceTag(); st.IsUpload = true; st.ProjectId = projectId; st.SourceId = uploadSource.Id; st.BuildDate = DateTime.Now; st.Name = "Upload"; st.Platforms = string.Join(" ", platforms); st.TargetAppVersion = appVersion; st.Status = SourceTagStatus.Ready; db.InsertObject(st); string filePath = null; if (!Directory.Exists(st.PackagesPath)) { Directory.CreateDirectory(st.PackagesPath); } if (platforms.Length == CurrentApplication.PlatformsList.Length) { filePath = Path.Combine(st.PackagesPath, "All.mpack"); if (file != null) { file.SaveAs(filePath); } else { File.WriteAllBytes(filePath, fileData); } } else { foreach (string plat in platforms) { filePath = Path.Combine(st.PackagesPath, plat + ".mpack"); if (file != null) { file.SaveAs(filePath); } else { File.WriteAllBytes(filePath, fileData); } } } AddinInfo mpack = ReadAddinInfo(filePath); st.AddinId = Addin.GetIdName(mpack.Id); st.AddinVersion = mpack.Version; db.UpdateObject(st); return(st); }
internal void RegisterAddin(IProgressMonitor monitor, AddinInfo info, string sourceDir) { monitor.Log.WriteLine ("Installing " + info.Name + " v" + info.Version); string addinDir = GetAddinDirectory (info); if (!Directory.Exists (addinDir)) Directory.CreateDirectory (addinDir); CopyDirectory (sourceDir, addinDir); ResetCachedData (); }
internal string GetAddinDirectory(AddinInfo info) { return Path.Combine (service.InstallDirectory, info.Id.Replace (',','.')); }
/// <summary> /// /// </summary> /// <param name="csvFile"></param> /// <param name="sourceDirectory"></param> /// <param name="installDirectory"></param> /// <returns></returns> public static ObservableCollection <AddinInfo> ReadAddInList(string csvFile, string sourceDirectory, string installDirectory) { var addinCollection = new ObservableCollection <AddinInfo>(); using (var parser = new TextFieldParser(csvFile)) { try { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); var firstRow = true; var formatMatched = true; while (!parser.EndOfData) { var fields = parser.ReadFields(); if (fields == null) { continue; } // (Konrad) We first verify that our CSV file has the same headers as anticipated. if (firstRow) { for (var i = 0; i < ColumnNames.Length; ++i) { if (fields[i] == ColumnNames[i]) { continue; } formatMatched = false; break; } firstRow = false; } else if (formatMatched) { var restart = bool.Parse(fields[6]); var addinInfo = new AddinInfo { IconName = fields[0], ToolName = fields[1], Index = int.Parse(fields[3]), Tooltip = fields[4], Url = fields[5], RequiresRestart = restart, LoadTypes = restart ? new[] { LoadType.Always, LoadType.Never } : new[] { LoadType.Never, LoadType.Always, LoadType.ThisSessionOnly } }; var names = fields[2]; string[] splitter = { ", ", "," }; var splitNames = names.Split(splitter, StringSplitOptions.RemoveEmptyEntries); addinInfo.AddInNames = splitNames; addinInfo.GetDetailInfo(sourceDirectory, installDirectory); var addinExist = true; //to make sure all addin files exist foreach (var addinPath in addinInfo.AddInPaths) { if (!File.Exists(addinPath)) { addinExist = false; } } if (addinExist) { addinCollection.Add(addinInfo); } } } addinCollection = new ObservableCollection <AddinInfo>(addinCollection.OrderBy(o => o.Index)); } catch (Exception ex) { Log.AppendLog(LogMessageType.EXCEPTION, ex.Message); } } return(addinCollection); }
AddinData BuildProjectAddin(BuildContext ctx, SourceTagInfo stag, string logFile, string sourcePath, AppReleaseInfo rel, AddinProjectAddin addin) { SetupService ss = new SetupService(); bool generatedXplatPackage = false; HashSet <string> foundPlatforms = new HashSet <string> (); AddinData ainfo = new AddinData(); foreach (AddinProjectSource psource in addin.Sources) { if (string.IsNullOrEmpty(psource.AddinFile)) { throw new Exception("AddinFile element not found in addin-project.xml"); } string platforms = psource.Platforms; if (string.IsNullOrEmpty(platforms)) { platforms = ctx.Application.Platforms; } string[] platformList = platforms.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); foreach (string plat in platformList) { if (!foundPlatforms.Add(plat)) { throw new Exception("Platform " + plat + " specificed in more than open Project element"); } } string outFile = NormalizePath(psource.AddinFile); if (!string.IsNullOrEmpty(psource.BuildFile)) { // Build the project // Move the sources to the work area (which is sandboxed) if (!Directory.Exists(ctx.LocalSettings.WorkAreaPath)) { Directory.CreateDirectory(ctx.LocalSettings.WorkAreaPath); } string workArea = Path.Combine(ctx.LocalSettings.WorkAreaPath, "builder"); if (Directory.Exists(workArea)) { Directory.Delete(workArea, true); } Directory.Move(sourcePath, workArea); StringBuilder output = new StringBuilder(); try { string solFile = Path.Combine(workArea, NormalizePath(psource.BuildFile)); // Restore packages RunCommand(true, "nuget", "restore \"" + solFile + "\"", output, output, Timeout.Infinite); string refPath = rel.GetAssembliesPath(ctx); if (ContaintsMdTargetsFile(workArea) && !string.IsNullOrEmpty(ctx.LocalSettings.LocalAppInstallPath)) { foreach (var p in ctx.LocalSettings.LocalAppInstallPath.Split(new [] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { var ip = Path.Combine(refPath, "__install", p); if (Directory.Exists(ip)) { refPath = ip; break; } } } string ops = " \"/p:ReferencePath=" + refPath + "\""; if (!string.IsNullOrEmpty(psource.BuildConfiguration)) { ops += " \"/property:Configuration=" + psource.BuildConfiguration + "\""; } ops = ops + " \"" + solFile + "\""; // Clean the project RunCommand(true, ctx.LocalSettings.MSBuildCommand, "/t:Clean " + ops, output, output, Timeout.Infinite); // Build RunCommand(true, ctx.LocalSettings.MSBuildCommand, ops, output, output, Timeout.Infinite); } finally { output = output.Replace(workArea, "/build"); File.AppendAllText(logFile, "<pre>" + HttpUtility.HtmlEncode(output.ToString()) + "</pre>"); Directory.Move(workArea, sourcePath); } } // Generate the package string tmpPath = Path.Combine(sourcePath, "tmp"); File.AppendAllText(logFile, "<p><b>Building Package</b></p>"); LocalStatusMonitor monitor = new LocalStatusMonitor(); try { if (Directory.Exists(tmpPath)) { Directory.Delete(tmpPath, true); } Directory.CreateDirectory(tmpPath); ss.BuildPackage(monitor, tmpPath, Path.Combine(sourcePath, outFile)); string file = Directory.GetFiles(tmpPath, "*.mpack").FirstOrDefault(); if (file == null) { throw new Exception("Add-in generation failed"); } AddinInfo ai = ReadAddinInfo(file); ainfo.AddinVersion = ai.Version; ainfo.AddinId = Mono.Addins.Addin.GetIdName(ai.Id); if (!generatedXplatPackage && platformList.Length > 0) { File.Copy(file, Path.Combine(stag.GetPackagePath(ctx), "All.mpack"), true); generatedXplatPackage = true; } else { foreach (string plat in platformList) { File.Copy(file, Path.Combine(stag.GetPackagePath(ctx), plat + ".mpack"), true); } } } finally { try { Directory.Delete(tmpPath, true); } catch { } File.AppendAllText(logFile, "<pre>" + HttpUtility.HtmlEncode(monitor.ToString()) + "</pre>"); } } ainfo.Platforms = string.Join(" ", foundPlatforms.ToArray()); ainfo.AppVersion = rel.AppVersion; return(ainfo); }
/// <summary> /// Create default constructed instance of addin /// </summary> /// <param name="ai"></param> /// <returns></returns> public static object CreateInstance(AddinInfo ai) { return Activator.CreateInstance(ai.Type); }