GetCppGeneratedFiles(IVsProject project, EnvDTE.Project dteproject, VCUtil vcutil, string projectDir, string item)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            var fileset = new GeneratedFileSet
            {
                filename = item,
                sources  = new Dictionary <string, List <string> >(),
                headers  = new Dictionary <string, List <string> >()
            };

            var outputDir       = project.GetItemMetadata(item, "OutputDir");
            var headerOutputDir = project.GetItemMetadata(item, "HeaderOutputDir");
            var headerExt       = project.GetItemMetadata(item, "HeaderExt");
            var sourceExt       = project.GetItemMetadata(item, "SourceExt");

            foreach (EnvDTE.Configuration configuration in dteproject.ConfigurationManager)
            {
                var evaluatedOutputDir       = vcutil.Evaluate(configuration, outputDir);
                var evaluatedHeaderOutputDir = string.IsNullOrEmpty(headerOutputDir) ?
                                               evaluatedOutputDir : vcutil.Evaluate(configuration, headerOutputDir);
                var cppFilename = string.Format("{0}.{1}", Path.GetFileNameWithoutExtension(item), sourceExt);
                var hFilename   = string.Format("{0}.{1}", Path.GetFileNameWithoutExtension(item), headerExt);

                cppFilename = Path.GetFullPath(Path.Combine(projectDir, evaluatedOutputDir, cppFilename));
                hFilename   = Path.GetFullPath(Path.Combine(projectDir, evaluatedHeaderOutputDir, hFilename));

                if (fileset.sources.ContainsKey(cppFilename))
                {
                    fileset.sources[cppFilename].Add(ConfigurationString(configuration));
                }
                else
                {
                    var configurations = new List <string>();
                    configurations.Add(ConfigurationString(configuration));
                    fileset.sources[cppFilename] = configurations;
                }

                if (fileset.headers.ContainsKey(hFilename))
                {
                    fileset.headers[hFilename].Add(ConfigurationString(configuration));
                }
                else
                {
                    var configurations = new List <string>();
                    configurations.Add(ConfigurationString(configuration));
                    fileset.headers[hFilename] = configurations;
                }
            }
            return(fileset);
        }
        GetCsharpGeneratedFiles(IVsProject project, EnvDTE.Project dteproject, string projectDir, string item)
        {
            ThreadHelper.ThrowIfNotOnUIThread();
            var fileset = new GeneratedFileSet
            {
                filename = item,
                sources  = new Dictionary <string, List <string> >(),
                headers  = new Dictionary <string, List <string> >()
            };
            var propertyStorage = project as IVsBuildPropertyStorage;
            var outputDir       = project.GetItemMetadata(item, "OutputDir");

            foreach (EnvDTE.Configuration configuration in dteproject.ConfigurationManager)
            {
                var configName         = string.Format("{0}|{1}", configuration.ConfigurationName, configuration.PlatformName);
                var evaluatedOutputDir = Evaluate(propertyStorage, configName, outputDir);

                var csFilename = string.Format("{0}.cs", Path.GetFileNameWithoutExtension(item));
                csFilename = Path.GetFullPath(Path.Combine(projectDir, evaluatedOutputDir, csFilename));

                if (fileset.sources.ContainsKey(csFilename))
                {
                    fileset.sources[csFilename].Add(
                        string.Format("{0}|{1}", configuration.ConfigurationName, configuration.PlatformName));
                }
                else
                {
                    var configurations = new List <string>();
                    configurations.Add(
                        string.Format("{0}|{1}", configuration.ConfigurationName, configuration.PlatformName));
                    fileset.sources[csFilename] = configurations;
                }
            }
            return(fileset);
        }