![](/img/trans.png)
[英]The “GetReferenceNearestTargetFrameworkTask” task was not found
[英]The “GetReferenceNearestTargetFrameworkTask” task has been declared or used incorrectly
上面的錯誤發生在執行以下測試的測試項目中的VS 2017 15.5.2中。 在test.vbproj文件中有綁定重定向,但msbuild沒有。
<TestMethod()> Public Sub ElementTypeUnitTestAsync()
Dim RoslynPath As String = Path.Combine(RepoPath, SolutionPartialPath)
Dim MS_Workspace As MSBuildWorkspace = MSBuildWorkspace.Create()
AddHandler MS_Workspace.WorkspaceFailed, Sub(sender As Object, e As WorkspaceDiagnosticEventArgs)
Debug.WriteLine(e.Diagnostic.ToString())
End Sub
Dim NewSolution As Solution = MS_Workspace.OpenSolutionAsync(RoslynPath).Result
End Sub
整個信息是
[失敗]處理文件'C:\\ Repos \\ roslyn-master \\ src \\ Samples \\ CSharp \\ APISampleUnitTests \\ APISampleUnitTestsCS.csproj'時,Msbuild失敗,消息為:C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2017 \\ Enterprise \\ MSBuild \\ 15.0 \\ Bin \\ Microsoft.Common.CurrentVersion.targets:(1601、5):無法從程序集“ C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2017 \\ Enterprise”實例化“ GetReferenceNearestTargetFrameworkTask”任務\\ Common7 \\ IDE \\ CommonExtensions \\ Microsoft \\ NuGet \\ NuGet.Build.Tasks.dll”。 請驗證該任務程序集是使用與計算機上安裝的版本相同的Microsoft.Build.Framework程序集構建的,並且您的主機應用程序沒有缺少Microsoft.Build.Framework的綁定重定向。 無法將類型為“ NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask”的對象轉換為類型為“ Microsoft.Build.Framework.ITask”的對象。 C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2017 \\ Enterprise \\ MSBuild \\ 15.0 \\ Bin \\ Microsoft.Common.CurrentVersion.targets:(1601,5):``GetReferenceNearestTargetFrameworkTask''任務已被聲明或使用不正確,或者施工期間失敗。 檢查任務名稱和程序集名稱的拼寫。
如果超過1個,此代碼將允許選擇VS實例
Imports Microsoft.Build.Locator
Public Class VS_Selector_Dialog1
Private m_instance As VisualStudioInstance = Nothing
Private SelectedRow As Integer = -1
Private visualStudioInstances() As VisualStudioInstance = MSBuildLocator.QueryVisualStudioInstances().ToArray()
Public ReadOnly Property MSBuildInstance As VisualStudioInstance
Get
Return m_instance
End Get
End Property
Private Sub Cancel_Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Cancel_Button.Click
DialogResult = DialogResult.Cancel
Close()
End Sub
Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
m_instance = visualStudioInstances(DataGridView1.CurrentRow.Index)
End Sub
Private Sub OK_Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles OK_Button.Click
If m_instance Is Nothing Then
Exit Sub
End If
DialogResult = DialogResult.OK
Close()
End Sub
Private Sub VS_Selector_Dialog1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim BestIndex As Integer = -1
Text = "Multiple installs of MSBuild detected please select one:"
Dim InstanceTable As New DataTable
InstanceTable.Columns.Add("InstanceNumber")
InstanceTable.Columns.Add("Edition")
InstanceTable.Columns.Add("Version")
InstanceTable.Columns.Add("MSBuildPath")
For Index As Integer = 0 To visualStudioInstances.Length - 1
If visualStudioInstances(Index).Name.Contains(" Build ") Then
Continue For
End If
BestIndex = Index
Dim rowToAdd As DataRow = InstanceTable.NewRow()
rowToAdd("InstanceNumber") = Index + 1
rowToAdd("Edition") = visualStudioInstances(Index).Name
rowToAdd("Version") = visualStudioInstances(Index).Version
rowToAdd("MSBuildPath") = visualStudioInstances(Index).MSBuildPath
InstanceTable.Rows.Add(rowToAdd)
Next
DataGridView1.DataSource = InstanceTable
If InstanceTable.Rows.Count = 1 Then
m_instance = visualStudioInstances(BestIndex)
DialogResult = DialogResult.OK
Close()
End If
End Sub
End Class
讓用戶選擇實例,或者您選擇“最佳”實例
If VS_Selector_Dialog1.ShowDialog(Me) <> DialogResult.OK Then
Stop
End If
一旦擁有正確的實例,MSBuild將可以正常工作
Console.WriteLine($"Using MSBuild at '{VS_Selector_Dialog1.MSBuildInstance.MSBuildPath}' to load projects.")
' NOTE: Be sure to register an instance with the MSBuildLocator
' before calling MSBuildWorkspace.Create()
' otherwise, MSBuildWorkspace won't MEF compose.
MSBuildLocator.RegisterInstance(VS_Selector_Dialog1.MSBuildInstance)
Using Workspace As MSBuildWorkspace = MSBuildWorkspace.Create()
AddHandler Workspace.WorkspaceFailed, AddressOf MSBuildWorkspaceFailed
Dim currentProject As Project = Workspace.OpenProjectAsync(.FileName).Result
Workspace.LoadMetadataForReferencedProjects = True
If currentProject.HasDocuments Then
For Each document As Document In currentProject.Documents
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.