Как получить расширенный путь из EnvDTE/VCProjectEngine

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

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

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

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

благодаря

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 ответ

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

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

licensed under cc by-sa 3.0 with attribution.