[英]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.