我尝试创建在Visual Studio中利用Xamarin的Android项目和跨平台项目。当我构建甚至是一个空项目时,它似乎立即失败,似乎没有执行任何工作。
没有列出任何错误或警告。
输出窗口具有项目名称和:
Build: 0 succeeded, 2 failed, 0 up-to-date, 0 skipped
启动项目时,我收到消息框,警告我有关意外的记录器故障,有时对话框会引用MuxLogger。这是不一致的,消息略有不同,有时根本没有出现。这是一个例子:
偶然地,我尝试手动构建以获取更多输出,我得到了:
Unhandled Exception: System.TypeLoadException: Could not load type 'Microsoft.Build.Logging.ProfilerLogger' from assembly 'Microsoft.Build, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)
at System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters()
at System.Reflection.RuntimeMethodInfo.GetParameters()
at System.Diagnostics.StackTrace.ToString(TraceFormat traceFormat)
at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Exception.GetStackTrace(Boolean needFileInfo)
at System.Exception.ToString(Boolean needFileLineInfo, Boolean needMessage)
at System.Exception.ToString()
at Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine)
at Microsoft.Build.CommandLine.MSBuildApp.Main()
请注意,我可以构建很多其他项目类型,例如Web项目和MonoGame项目。
答案 0 :(得分:3)
最终,这证明与全局程序集缓存(GAC)中安装的MSBuild的旧版本有关。要进行检查,请首先打开VS2017的Developer Command Prompt实例。然后将GAC中的程序集输出到文件中以便于查看:
gacutil -l >> someFile.txt
查找以Microsoft.Build
开头的任何内容,尤其是包含Version=15.X
的行(提示,这些行不会按顺序输出,因此请按字母顺序对行进行排序)。
卸载所有以Microsoft.Build开头的内容,其中可能包括Microsoft.Build.Framework,Microsoft.Build等。这不应安装版本<15的Microsoft.Build版本。命令:
gacutil -u Microsoft.Build
和
gacutil -u Microsoft.Build.Framework
这应该使您的项目能够使用正确版本的MSBuild并成功编译。