Как получить расширенный путь из EnvDTE / VCProjectEngine - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь написать инструмент для создания zip-файла, содержащего все файлы PDB из одного решения Visual Studio 2010.

Я могу получить каждый путь файла PDB в решении с помощью следующего кода.Однако значение свойства содержит макрос Visual Studio, такой как $ (TargetDir), $ (TargetName) и т. Д.

Есть ли в API EnvDTE функция для расширения этих макросов до их текущих значений?

С другой стороны, приветствуются любые другие методы, которые могли бы достичь моей начальной цели!

Спасибо

        System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
        object obj = Activator.CreateInstance(t, true);
        DTE dte = (DTE)obj;
        Solution sln = dte.Solution;
        sln.Open(args[0]);
        while (sln.IsOpen == false)
        {
            System.Threading.Thread.Sleep(100);
        }

        sln.SolutionBuild.SolutionConfigurations.Item("Release").Activate();

        foreach (EnvDTE.Project project in sln.Projects)
        {
            Console.WriteLine("Inspecting project {0}", project.Name);

            VCProject vcproj = (VCProject)project.Object;

            if (vcproj == null) // this is not a visual c++ project
                continue;

            IVCCollection cfgs = vcproj.Configurations;
            VCConfiguration cfg = cfgs.Item(1);
            VCLinkerTool tool = cfg.Tools("VCLinkerTool");
            if (tool == null) // this is not a DLL/EXE project
                continue;
            Console.WriteLine("Program database = " + tool.ProgramDatabaseFile);
        }

1 Ответ

1 голос
/ 20 декабря 2011

Я не пробовал это с VS2010, но в VS2008 вы можете вызвать VCConfiguration.Evaluate, чтобы сделать это. В вашем примере это будет примерно так:

string evaluatedPdbPath = cfg.Evaluate(tool.ProgramDatabaseFile);
...