3

我需要通过 DTE 获取项目程序集的绝对输出路径。我尝试使用此方法执行此操作,我将在其中访问 OutputPath 属性,将其与程序集名称结合起来,但这会产生相对路径,例如:

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

使用Path.GetFullPath对我不利,因为我的项目可能是从另一个位置执行的。

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

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

4

1 回答 1

3

我不知道如何以编程方式访问“$(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 中可用,但您始终可以向后移植它)

于 2011-03-30T13:13:58.010 回答