public static string ExtractPackage( string packageId, string version, string tarketFrameworkMoniker, string outputDir) { var cacheRootPath = GetPackageCacheRoot(); var packagePath = Path.Combine(cacheRootPath, packageId + "." + version); if (Directory.Exists(packagePath) == false) { throw new InvalidOperationException("Cannot find the package: " + packagePath); } var libPath = Path.Combine(packagePath, "lib", tarketFrameworkMoniker); var target = $"Assets/UnityPackages/{packageId}"; var targetDir = Path.Combine(outputDir, target); if (Directory.Exists(libPath) == false) { if (TryExtractAnalyzersPackage(packageId, version, outputDir, out targetDir)) { return(targetDir); } throw new InvalidOperationException("Cannot find lib directory: " + libPath); } Directory.CreateDirectory(targetDir); File.WriteAllBytes(targetDir + ".meta", Packer.GenerateMeta(".", target).Item2); Packer.GenerateMeta(".", target); foreach (var file in Directory.GetFiles(libPath, "*.dll")) { var fileName = Path.GetFileName(file); var mdbFile = file + ".mdb"; if (File.Exists(mdbFile) == false) { MdbTool.ConvertPdbToMdb(file); } File.Copy(file, Path.Combine(targetDir, fileName), true); File.WriteAllBytes(Path.Combine(targetDir, fileName) + ".meta", Packer.GenerateMeta(file, target + "/" + fileName).Item2); if (File.Exists(mdbFile)) { File.Copy(mdbFile, Path.Combine(targetDir, fileName + ".mdb"), true); File.WriteAllBytes(Path.Combine(targetDir, fileName) + ".mdb.meta", Packer.GenerateMeta(file, target + "/" + fileName + ".mdb").Item2); } } return(targetDir); }
internal static void AddFiles(Packer packer, List <Project.FileItem> files, string source, string target, bool extra) { var dirs = new HashSet <string>(); foreach (var f in FileUtility.GetFiles(source, target)) { var srcFile = f.Item1; var dstFile = f.Item2.Replace("\\", "/"); if (Path.GetExtension(srcFile).ToLower() == ".meta") { continue; } // add file files.Add(new Project.FileItem { Source = srcFile, Target = dstFile, Extra = extra, }); if (File.Exists(srcFile + ".meta")) { packer.Add(srcFile, dstFile); } else { packer.AddWithMetaGenerated(srcFile, dstFile); } dirs.Add(Path.GetDirectoryName(dstFile).Replace("\\", "/")); // if dll, add *.mdb. if not exist, generate one from pdb if (Path.GetExtension(srcFile).ToLower() == ".dll") { var mdbFilePath = srcFile + ".mdb"; if (File.Exists(mdbFilePath) == false || File.GetLastWriteTime(srcFile) > File.GetLastWriteTime(mdbFilePath)) { MdbTool.ConvertPdbToMdb(srcFile); } if (File.Exists(mdbFilePath)) { files.Add(new Project.FileItem { Source = mdbFilePath, Target = dstFile + ".mdb", Extra = extra, }); packer.AddWithMetaGenerated(mdbFilePath, dstFile + ".mdb"); } } } foreach (var dir in dirs) { packer.AddDirectoriesWithMetaGenerated(dir); } }