我正在尝试编写一个工具来创建一个包含来自一个Visual Studio 2010解决方案的所有PDB文件的zip文件。
我可以使用以下代码获取解决方案中的每个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);
}
答案 0 :(得分:1)
我没有尝试使用VS2010,但在VS2008中你可以调用VCConfiguration.Evaluate来做到这一点。在您的示例中,它将是这样的:
string evaluatedPdbPath = cfg.Evaluate(tool.ProgramDatabaseFile);