Visual studio 2010 如何从EnvDTE/VCProjectEngine获取扩展路径

Visual studio 2010 如何从EnvDTE/VCProjectEngine获取扩展路径,visual-studio-2010,envdte,Visual Studio 2010,Envdte,我正在尝试编写一个工具来创建一个zip文件,其中包含来自一个VisualStudio2010解决方案的所有PDBs文件 我可以使用以下代码获得解决方案中的每个PDB文件路径。但是,属性值包含Visual Studio宏,如$(TargetDir)、$(TargetName)等 EnvDTE API中是否有将这些宏扩展到其当前值的函数 另一方面,任何能达到我最初目标的方法都是受欢迎的 谢谢 System.Type t = System.Type.GetTypeFromProgID(

我正在尝试编写一个工具来创建一个zip文件,其中包含来自一个VisualStudio2010解决方案的所有PDBs文件

我可以使用以下代码获得解决方案中的每个PDB文件路径。但是,属性值包含Visual Studio宏,如$(TargetDir)、$(TargetName)等

EnvDTE 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);
        }

我还没有在VS2010中尝试过,但在VS2008中,您可以调用VCConfiguration.Evaluate来执行此操作。在您的示例中,可能是这样的:

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