我需要通过DTE获得项目组装的绝对输出路径。我尝试使用this method执行此操作,我将访问OutputPath属性,将其与程序集名称组合,但这会生成相对路径,例如:
..\..\Output\AnyCPU\Debug\MyAssembly.dll
使用Path.GetFullPath
对我不利,因为我的项目可能正在从其他位置执行。
我注意到$(TargetPath)宏(在项目属性的Build Events选项卡中)包含程序集的完整路径。如何从DTE以编程方式访问此值?
实际问题是 - 如何获得项目的绝对输出路径?
答案 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中可用,但您可以始终向后移植它)