通过DTE获取项目TargetPath的宏值

时间:2011-03-30 12:58:22

标签: visual-studio macros project envdte

我需要通过DTE获得项目组装的绝对输出路径。我尝试使用this method执行此操作,我将访问OutputPath属性,将其与程序集名称组合,但这会生成相对路径,例如:

  

..\..\Output\AnyCPU\Debug\MyAssembly.dll

使用Path.GetFullPath对我不利,因为我的项目可能正在从其他位置执行。

我注意到$(TargetPath)宏(在项目属性的Build Events选项卡中)包含程序集的完整路径。如何从DTE以编程方式访问此值?

实际问题是 - 如何获得项目的绝对输出路径?

1 个答案:

答案 0 :(得分:2)

我不知道如何以编程方式访问“$(TargetPath)”,我同意这可能是最好的解决方案。

但是,您提到的方法仍然可行,因为OutputPath属性与项目文件所在的文件夹相关。 (如果我错过了某种不是这种情况的情况,请告诉我。)

所以你可以做类似的事情:

      private static string GetProjectExecutable(Project startupProject, Configuration config)
    {
        string projectFolder    = Path.GetDirectoryName(startupProject.FileName);
        string outputPath       = (string)config.Properties.Item("OutputPath").Value;
        string assemblyFileName = (string)startupProject.Properties.Item("AssemblyName").Value + ".exe";
        return Path.Combine(new[] {
                                      projectFolder,
                                      outputPath,
                                      assemblyFileName
                                  });
    }

(此处使用的Path.Combine的重载仅在.NET 4.0中可用,但您可以始终向后移植它)