Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }