System.Exception:未找到运行时 Mono 的 MSBuild

System.Exception: Did not find MSBuild for runtime Mono

我正在为 Mac 编译 Visual Studio Community 2017 中的源代码,但出现以下错误:

Building: ServiceLayer.API (Debug)
Error: Build failed. See the build log for details. (ServiceLayer.API)
---------------------- Done ----------------------
Build failed.
Build: 1 error, 0 warnings

Ide.log 日志文件中,我有以下条目:

ERROR [2017-10-08 20:20:45Z]: Inspector does not support this project type
ERROR [2017-10-08 20:20:45Z]: Build failed.
System.Exception: Did not find MSBuild for runtime Mono 4.0.2 (c99aa0c)
  at MonoDevelop.Projects.MSBuild.MSBuildProjectService.GetNewestInstalledToolsVersion (MonoDevelop.Core.Assemblies.TargetRuntime runtime, System.Boolean requiresMicrosoftBuild, System.String& binDir) [0x0006e] in /Users/builder/data/lanes/5144/cab57de4/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProjectService.cs:1087 
  at MonoDevelop.Projects.MSBuild.MSBuildProjectService+<GetProjectBuilder>d__100.MoveNext () [0x00133] in /Users/builder/data/lanes/5144/cab57de4/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/MSBuildProjectService.cs:1116
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/4992/mono-mac-sdk/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Users/builder/data/lanes/4992/mono-mac-sdk/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Users/builder/data/lanes/4992/mono-mac-sdk/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Users/builder/data/lanes/4992/mono-mac-sdk/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in /Users/builder/data/lanes/4992/mono-mac-sdk/external/bockbuild/builds/mono-x64/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357
  at MonoDevelop.Projects.Project+<GetProjectBuilder>d__157.MoveNext () [0x001bb] in /Users/builder/data/lanes/5144/cab57de4/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs:1418 
...
ERROR [2017-10-08 20:21:16Z]: An unhandled exception has occured. Terminating Visual Studio? False

注意:每次尝试构建总共有 381 行。 'End of stack trace' 行重复了 52 次。

这让我看到了 MonoDevelop 中的这一行(参见:MSBuildProjectService.cs):

throw new Exception ("Did not find MSBuild for runtime " + runtime.Id);

我检查过 msbuild 命令存在于 command-line:

$ which msbuild
/Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild
$ msbuild --version
Microsoft (R) Build Engine version 15.4.0.0 (master/f296e67b Thu Sep 21 19:38:16 EDT 2017) for Mono
$ stat /Library/Frameworks/Mono.framework/Versions/Current
  File: /Library/Frameworks/Mono.framework/Versions/Current -> /Library/Frameworks/Mono.framework/Versions/5.4.0

到目前为止我尝试过的:

我已签入 Visual Studio偏好...项目, .NET Runtimes 并且我将最新的 Mono 设置为 Default (到 5. 4.x):

但是在调试时,它试图为 4.0.2 打开 msbuild,例如:

$ sudo fs_usage -f pathname VisualStudio | grep -i msbuild
12:34:38  stat64            /Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/msbuild>>>>>>>>>>>>>>>>>>>>>>    0.000007   VisualStudio
12:34:38  lstat64           /Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/msbuild>>>>>>>>>>>>>>>>>>>>>>    0.000002   VisualStudio
12:34:38  access            /Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/msbuild>>>>>>>>>>>>>>>>>>>>>>    0.000002   VisualStudio

不存在。


我应该如何将缺少的 MSBuild 添加到我的 Solution(项目)(根据提到的错误)?

Mono 4.0.2 没有 msbuild,它包含在 4.8.0+ 中。检查 /Library/Frameworks/Mono.framework/Versions/Current(符号链接)指向何处。它可能指向一些单声道 5.x.y 。尝试将 VSMac 在 首选项 -> 项目 -> .NET 运行时 中设置使用的 .NET 运行时间更改为最新的。

出于某种原因,它仍在 4.0.2 中查找。我会尝试至少暂时删除该 4.0.2 目录,然后进行检查。但除此之外,我认为您的安装已损坏,我会尝试重新安装整个东西(VSMac、Mono、..)。

此外,检查您的 Ide.log 文件中是否有任何对 4.0.2 的引用,在该异常之前。

如果您 运行 遇到同样的问题,即使是全新安装,请在 bugzilla.xamarin.com 提交错误,我们可以尝试在那里进行调试。