Esempio n. 1
0
        // from http://blogs.msdn.com/b/kirillosenkov/archive/2011/08/10/how-to-get-dte-from-visual-studio-process-id.aspx
        public static DTE GetDTE(string file, string lineNumberText)
        {
            var dte = FindDTE(file);

            if (dte != null)
            {
                return(dte);
            }

            // Couldn't find an instance of Visual Studio with a solution containing this file.
            // Try finding a Skyline solution we can use and open that one.
            var parentDirectory = Path.GetDirectoryName(file);

            while (parentDirectory != null)
            {
                var skylineSln = Path.Combine(parentDirectory, "Skyline.sln");
                var vsExe      = SkylineTesterWindow.GetExistingVsIdeFilePath("devenv.exe");
                if (vsExe != null && File.Exists(skylineSln))
                {
                    System.Diagnostics.Process.Start(vsExe,
                                                     @"{0} {1} /command ""Edit.Goto {2}""".With(skylineSln, file, lineNumberText));
                    return(null);
                }
                parentDirectory = Path.GetDirectoryName(parentDirectory);
            }

            return(null);
        }
        public static void CreateZipFile(string zipPath)
        {
            zipPath = zipPath ?? string.Empty; // For quiet ReSharper code inspection

            Console.WriteLine();
            Console.WriteLine("# Creating " + Path.GetFileName(zipPath) + "...");
            Console.WriteLine();

            if (File.Exists(zipPath))
            {
                File.Delete(zipPath);
            }

            var exeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";

            Directory.SetCurrentDirectory(exeDirectory);

            var solutionDirectory = exeDirectory;

            while (!File.Exists(Path.Combine(solutionDirectory, "Skyline.sln")))
            {
                solutionDirectory = Path.GetDirectoryName(solutionDirectory);
                if (string.IsNullOrEmpty(solutionDirectory))
                {
                    throw new ApplicationException("Can't find solution directory");
                }
            }

            using (var zipFile = new ZipFile(zipPath))
            {
                // DotNetZip has a _bug_ which causes an extraction error without this
                // (see http://stackoverflow.com/questions/15337186/dotnetzip-badreadexception-on-extract)
                zipFile.ParallelDeflateThreshold = -1;
                zipFile.AlternateEncodingUsage   = ZipOption.Always;
                zipFile.AlternateEncoding        = System.Text.Encoding.UTF8;

                if ((String.Empty + Path.GetFileName(zipPath)).ToLower() == "skylinenightly.zip")
                {
                    // Add files to top level of zip file.
                    var files = new[]
                    {
                        "SkylineNightlyShim.exe",
                        "SkylineNightly.exe",
                        "SkylineNightly.pdb",
                        "Microsoft.Win32.TaskScheduler.dll",
                        "DotNetZip.dll"
                    };
                    foreach (var file in files)
                    {
                        Console.WriteLine(file);
                        zipFile.AddFile(file);
                    }
                }

                else if ((String.Empty + Path.GetFileName(zipPath)).ToLower() == "bibliospec.zip")
                {
                    // Create a BiblioSpec distro
                    var files = new List <string>
                    {
                        "BlibBuild.exe",
                        "BlibFilter.exe",
                        "MassLynxRaw.dll",
                        "timsdata.dll",
                        "baf2sql_c.dll",
                        "cdt.dll",
                        "modifications.xml",
                        "quantitation_1.xsd",
                        "quantitation_2.xsd",
                        "unimod_2.xsd"
                    };
                    var dir = Directory.GetCurrentDirectory();
                    files.Add(dir.Contains("Debug") ? "msparserD.dll" : "msparser.dll");

                    // Locate BlibToMS2
                    var parent = dir.IndexOf("Skyline\\", StringComparison.Ordinal);
                    if (parent > 0)
                    {
                        dir = dir.Substring(0, parent);
                        var blib2ms2 = dir + "Shared\\BiblioSpec\\obj\\x64\\BlibToMs2.exe";
                        if (File.Exists(blib2ms2)) // Don't worry about this for a 32 bit build, we don't distribute that
                        {
                            files.Add(blib2ms2);
                        }
                    }
                    foreach (var file in files)
                    {
                        Console.WriteLine(file);
                        zipFile.AddFile(file, string.Empty);
                    }
                }

                else
                {
                    // Add SkylineTester at top level of zip file.
                    Console.WriteLine("SkylineTester.exe");
                    zipFile.AddFile("SkylineTester.exe");

                    // Add .skytr files at top level of zip file.
                    var skytrDirectory = Path.Combine(solutionDirectory, @"SkylineTester\Run files");
                    foreach (var skytrFile in Directory.EnumerateFiles(skytrDirectory, "*.skytr"))
                    {
                        AddFile(skytrFile, zipFile, ".");
                    }

                    // Add each subdirectory in the bin directory.
                    foreach (var directory in Directory.EnumerateDirectories("."))
                    {
                        if (Include(directory))
                        {
                            var name = Path.GetFileName(directory) ?? "";
                            Console.WriteLine(Path.Combine(SkylineTesterWindow.SkylineTesterFiles, name));
                            zipFile.AddDirectory(directory, Path.Combine(SkylineTesterWindow.SkylineTesterFiles, name));
                        }
                    }

                    // Add each file in the bin directory.
                    foreach (var file in Directory.EnumerateFiles("."))
                    {
                        if (Include(file))
                        {
                            AddFile(file, zipFile);
                        }
                    }

                    // Add test zip files.
                    var zipFilesList = new List <string>();
                    FindZipFiles(solutionDirectory, zipFilesList);
                    var zipFilesDirectory = Path.Combine(SkylineTesterWindow.SkylineTesterFiles, "TestZipFiles");
                    foreach (var testZipFile in zipFilesList)
                    {
                        var testZipDirectory = Path.GetDirectoryName(testZipFile);
                        if (string.IsNullOrEmpty(testZipDirectory))
                        {
                            continue;
                        }
                        testZipDirectory = Path.Combine(zipFilesDirectory,
                                                        testZipDirectory.Substring(solutionDirectory.Length + 1));
                        AddFile(testZipFile, zipFile, testZipDirectory);
                    }

                    // Add pwiz vendor reader test data
                    var vendorTestData = new List <string>();
                    foreach (TestFilesDir.VendorDir vendorDir in Enum.GetValues(typeof(TestFilesDir.VendorDir)))
                    {
                        FindVendorReaderTestData(TestFilesDir.GetVendorTestData(vendorDir), vendorTestData);
                    }
                    foreach (var file in vendorTestData)
                    {
                        var parentDirectory = Path.GetDirectoryName(file);
                        if (string.IsNullOrEmpty(parentDirectory))
                        {
                            continue;
                        }
                        int relativePathStart = parentDirectory.LastIndexOf('\\',
                                                                            parentDirectory.IndexOf(@"Test.data", StringComparison.InvariantCulture));
                        parentDirectory = parentDirectory.Substring(relativePathStart + 1);
                        AddFile(file, zipFile, Path.Combine(SkylineTesterWindow.SkylineTesterFiles, parentDirectory));
                    }

                    // Add the file that we use to determine which branch this is from
                    AddFile(Path.Combine(solutionDirectory, "..\\..\\pwiz\\Version.cpp"), zipFile);

                    // Add unit testing DLL.
                    const string relativeUnitTestingDll =
                        @"PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll";
                    var unitTestingDll = SkylineTesterWindow.GetExistingVsIdeFilePath(relativeUnitTestingDll);
                    if (unitTestingDll == null)
                    {
                        throw new ApplicationException(string.Format("Can't find {0}", relativeUnitTestingDll));
                    }
                    AddFile(unitTestingDll, zipFile);
                }

                Console.WriteLine();
                Console.WriteLine("# Saving...");
                zipFile.Save();
                Console.WriteLine();
                Console.WriteLine("# {0} size: {1:F1} MB", Path.GetFileName(zipPath), new FileInfo(PathEx.SafePath(zipPath)).Length / (1024.0 * 1024));
                Console.WriteLine("# Done.");
                Console.WriteLine();
            }
        }