Как получить путь msbuild из макроса Visual Studio? - PullRequest
1 голос
/ 20 октября 2011

Я пытаюсь создать пункт контекстного меню, который будет запускать msbuild для определенных расширений.Я нашел макрос, который будет проверять расширение выбранного элемента в обозревателе решений.

Все, что мне осталось сделать - это запустить msbuild для файла.Я не хочу жестко кодировать путь.Поэтому я думаю, что должен быть способ получить путь к пути msbuild для загруженного в данный момент решения.

1 Ответ

3 голосов
/ 20 октября 2011

Используйте зарезервированное свойство $(MSBuildToolsPath), которое разрешается примерно так, в зависимости от версии .NET:

C:\Windows\Microsoft.NET\Frameworks\v4.0.30319\

Существует также семейство свойств $ (MSBuildExtensionsPath) (включая 32- и 64-разрядные), которые будут указывать на:

C:\Program Files\MSBuild\

- из книги "MSBuild Trickery" трюки № 19 и № 43

edit: добавление кода макроса для извлечения

Следующий макрос Visual Studio будет перечислять все текущие свойства, включая $ (MSBuildToolsPath), $ (MSBuildToolsRoot) и $ (MSBuildToolsPath32), последнее из которых возможно только на 64-битной машине, я не уверен.

'
' Note: you need to have an open solution, an active document,
' and a visible Build pane in the Output window
'
Public Module Module1
  Public Sub ListProperties()
    Dim doc As Document = DTE.ActiveDocument
    Dim projectItem As ProjectItem = doc.ProjectItem
    Dim project As Project = projectItem.ContainingProject

    Dim evalProject As Microsoft.Build.Evaluation.Project = _
        Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection _
          .LoadProject(project.FullName)

    Dim ow As EnvDTE.OutputWindow
    ow = DTE.ToolWindows.OutputWindow
    Dim wp As OutputWindowPane
    wp = ow.OutputWindowPanes.Item("Build")

    Dim e As System.Collections.Generic.IEnumerator(Of Microsoft.Build _
      .Evaluation.ProjectProperty)
    e = evalProject.AllEvaluatedProperties.GetEnumerator()
    e.MoveNext()
    For i = 0 To evalProject.AllEvaluatedProperties.Count - 1
      Dim s As String
      s = s + e.Current.Name + " = " + e.Current.UnevaluatedValue + vbCrLf
      wp.OutputString(s)
      e.MoveNext()
      s = ""
    Next
  End Sub
End Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...