예제 #1
0
        private void AddConfig(object sender, EventArgs e)
        {
            string folder       = _item.ContainingProject.GetRootFolder();
            string configFile   = _item.ContainingProject.GetConfigFile();
            string relativeFile = FileHelpers.MakeRelative(configFile, ProjectHelpers.GetSelectedItemPaths().First());

            // Recompile if already configured
            if (_reCompileConfigs.Any())
            {
                string absoluteFile = Path.Combine(folder, relativeFile).Replace("/", "\\");
                Telemetry.TrackEvent("VS recompile config");
                CompilerService.SourceFileChanged(configFile, absoluteFile);
                return;
            }

            // Create new config
            WebCompilerPackage._dte.StatusBar.Progress(true, "Compiling file", 0, 3);
            string inputFile  = _item.Properties.Item("FullPath").Value.ToString();
            string outputFile = GetOutputFileName(inputFile);

            if (string.IsNullOrEmpty(outputFile))
            {
                return;
            }

            string relativeOutputFile = FileHelpers.MakeRelative(configFile, outputFile);
            Config config             = CreateConfigFile(relativeFile, relativeOutputFile);

            WebCompilerPackage._dte.StatusBar.Progress(true, "Compiling file", 1, 3);

            ProjectHelpers.CheckFileOutOfSourceControl(configFile);
            ConfigHandler handler = new ConfigHandler();

            handler.AddConfig(configFile, config);

            _item.ContainingProject.AddFileToProject(configFile, "None");
            WebCompilerPackage._dte.StatusBar.Progress(true, "Compiling file", 2, 3);

            // Create defaults file
            string defaultsFile = Path.Combine(folder, Constants.DEFAULTS_FILENAME);

            ProjectHelpers.CheckFileOutOfSourceControl(defaultsFile);
            handler.CreateDefaultsFile(defaultsFile);
            ProjectHelpers.AddNestedFile(configFile, defaultsFile, "None");
            WebCompilerPackage._dte.StatusBar.Progress(true, "Creating defaults file", 3, 3);

            CompilerService.Process(configFile, new[] { config });
            WebCompilerPackage._dte.StatusBar.Progress(false, "Compiling file");

            Telemetry.TrackEvent("VS config created");
        }