public void Dispose() { CbSTUtils.ForeachDispose(CanvasData); CanvasData = null; CapyCSS.Language.Instance.Dispose(); ToolExec.KillProcess(); GC.SuppressFinalize(this); }
/// <summary> /// パッケージをインストールします。 /// ただし、既にインストール済みならインストールはしません。 /// </summary> /// <param name="packageDir">パッケージ展開用ディレクトリ</param> /// <param name="packageName">パッケージ名</param> /// <param name="version">バージョン</param> /// <param name="pkgId">正式なパッケージ名(name(var))</param> /// <returns>dllリスト</returns> public static List <PackageInfo> install(string _packageDir, string packageName, string version, out string pkgId) { pkgId = ""; string toolPath = Path.Combine(_packageDir, "nuget.exe"); if (!File.Exists(toolPath)) { string msg = Language.Instance["Help:NugetNotExist"]; ControlTools.ShowErrorMessage(msg.Replace("<DIR>", _packageDir)); return(null); } string packageVName = $"{packageName}.{version}"; string packageDir = Path.Combine(_packageDir, packageName); string packageRoot = Path.Combine(packageDir, packageVName); if (!Directory.Exists(packageRoot)) { // nugetファイルをダウンロード Console.WriteLine($"Get {packageVName}"); ToolExec toolExec = new ToolExec(toolPath); toolExec.ParamList.Add("Install"); toolExec.ParamList.Add(packageName); toolExec.ParamList.Add("-Version"); toolExec.ParamList.Add(version); toolExec.ParamList.Add("-PackageSaveMode"); toolExec.ParamList.Add("nuspec"); toolExec.ParamList.Add("-OutputDirectory"); toolExec.ParamList.Add(packageDir); int result = toolExec.Start(true); if (result == 0) { Console.WriteLine("OK"); CommandCanvasList.OutPut.Flush(); } else { Console.WriteLine($"error({result})"); return(null); } } List <string> dllList = new List <string>(); List <string> libPathList = new List <string>(FileLib.GetDirectories(packageDir, true)); libPathList.Sort((a, b) => b.CompareTo(a)); foreach (var dir in libPathList) { if (dir.Contains(@"\ref\")) { continue; } if (dir.Contains("netstandard")) { ICollection <string> dll = FileLib.GetFiles(dir, "*.dll"); if (dll.Count != 0) { bool isHit = dllList.Any((n) => dir.StartsWith(n.Substring(0, n.IndexOf("netstandard")))); if (isHit) { continue; } dllList.Add(dll.First()); } } } // dll をリストに登録 var packageList = new List <PackageInfo>(); if (dllList != null && dllList.Count != 0) { string basePass = System.IO.Path.GetDirectoryName(dllList[dllList.Count - 1]); foreach (var libPath in dllList) { // 内部に複数のサブディレクトリを持っている場合、サブディレクトリ名を名前に残す string name = Path.GetFileNameWithoutExtension(libPath); if (loadedPackages.Contains(libPath)) { // 一度取り込んでいるdllは無視する continue; } loadedPackages.Add(libPath); Match match = Regex.Match(libPath, @"\d+\.\d+\.\d+"); if (match.Success) // バージョン情報が見つかった { packageList.Add(new PackageInfo(libPath, name.Replace(match.Value, ""), match.Value)); } else { packageList.Add(new PackageInfo(libPath, name, "")); } } } { Match match = Regex.Match(packageVName, @"\d+\.\d+\.\d+"); if (match.Success) // バージョン情報が見つかった { pkgId = packageVName.Replace("." + match.Value, ""); } else { pkgId = packageVName; } } return(packageList); }