Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        //--- 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);
        }
Ejemplo n.º 5
0
 /// <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);
             }
         }
     }
 }
Ejemplo n.º 6
0
 /// <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);
             }
         }
     }
 }
Ejemplo n.º 7
0
        /// <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);
            }
        }
Ejemplo n.º 8
0
        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();
            }
        }
Ejemplo n.º 9
0
        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);
                }
            }
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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 ();
        }
Ejemplo n.º 13
0
 internal string GetAddinDirectory(AddinInfo info)
 {
     return Path.Combine (service.InstallDirectory, info.Id.Replace (',','.'));
 }
Ejemplo n.º 14
0
        /// <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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
 /// <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);
 }