簡體   English   中英

如何從Visual Studio宏獲取msbuild路徑?

[英]How do I get the msbuild path from Visual Studio macro?

我正在嘗試創建一個上下文菜單項,將在某些擴展上運行msbuild。 我找到了將檢查解決方案資源管理器中當前所選項目的擴展名的宏。

我剩下要做的就是在文件上運行msbuild。 我不想硬編碼路徑。 所以我認為必須有一種方法來獲取當前加載的解決方案的msbuild路徑的路徑。

使用保留的屬性$(MSBuildToolsPath) ,該屬性將解析為以下內容,具體取決於.NET版本:

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

$(MSBuildExtensionsPath)屬性系列(包括32位和64位特定的屬性)將指向:

C:\Program Files\MSBuild\

- 從“MSBuild Trickery”一書中可以看出#19和#43

編輯:添加宏代碼以進行提取

下面的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM