Получение значения макроса TargetPath проекта через DTE - PullRequest
3 голосов
/ 30 марта 2011

Мне нужно получить абсолютный путь вывода сборки проекта через DTE.Я попытался сделать это, используя этот метод , где я хотел бы получить доступ к свойству OutputPath, комбинируя его с именем сборки, однако это дает относительный путь, например:

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

Использование Path.GetFullPath не очень хорошо для меня, потому что мой проект может выполняться из другого места.

Я заметил, что макрос $ (TargetPath) (на вкладке «События сборки» в свойствах проекта) содержит полный путь сборки.Как я могу получить доступ к этому значению программно из DTE?

Актуальный вопрос - как мне получить абсолютный путь вывода проекта?

1 Ответ

2 голосов
/ 30 марта 2011

Я не знаю, как программно получить доступ к "$ (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, но вы всегда можете ее перенести)

...