Visual Studio 2017 升级到 15.8.1/15.8.2 后,Xamarin Android 应用项目构建出现问题

7
在将Visual Studio 2017升级至15.8.1版本并使用Android SDK版本28(支持Android 9.0 P)后,我们在构建基于Xamarin的Android应用程序C#项目时遇到了以下错误:
_LinkAssembliesNoShrink:
  Creating "obj\\ObRelease\MonoAndroid90\link.flag" because "AlwaysCreate" was specified.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Failed to read 'D:\MyAndroidApp\obj\ObRelease\MonoAndroid90\android\assets\Mono.Android.dll' with debugging symbols. Retrying to load it without it. Error details are logged below. [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Mono.Cecil.Cil.SymbolsNotMatchingException: Symbols were found but are not matching the assembly [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader, Boolean throwIfSymbolsAreNotMaching) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.CreateModule(Image image, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(Disposable`1 stream, String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.AssemblyDefinition.ReadAssembly(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.ReadAssembly(String file) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Failed to read 'D:\MyAndroidApp\obj\ObRelease\MonoAndroid90\android\assets\System.dll' with debugging symbols. Retrying to load it without it. Error details are logged below. [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Mono.Cecil.Cil.SymbolsNotMatchingException: Symbols were found but are not matching the assembly [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader, Boolean throwIfSymbolsAreNotMaching) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.CreateModule(Image image, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(Disposable`1 stream, String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.AssemblyDefinition.ReadAssembly(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.ReadAssembly(String file) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Failed to read 'D:\MyAndroidApp\obj\ObRelease\MonoAndroid90\android\assets\System.Xml.dll' with debugging symbols. Retrying to load it without it. Error details are logged below. [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning : Mono.Cecil.Cil.SymbolsNotMatchingException: Symbols were found but are not matching the assembly [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader, Boolean throwIfSymbolsAreNotMaching) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleReader.CreateModule(Image image, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(Disposable`1 stream, String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Mono.Cecil.AssemblyDefinition.ReadAssembly(String fileName, ReaderParameters parameters) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): warning :    at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.ReadAssembly(String file) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018: The "GenerateJavaStubs" task failed unexpectedly. [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018: System.NullReferenceException: Object reference not set to an instance of an object. [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.TypeNameMappings.JavaNativeTypeManager.<>c.<ToJniNameFromAttributes>b__42_0(CustomAttribute a) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.TypeNameMappings.JavaNativeTypeManager.ToJniNameFromAttributes(TypeDefinition type) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.TypeNameMappings.JavaNativeTypeManager.ToJniName[T](T type, Func`2 decl, Func`2 name, Func`2 ns, Func`2 overrideName, Func`2 shouldUpdateName) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.TypeNameMappings.JavaNativeTypeManager.ToJniName(TypeDefinition type, ExportParameterKind exportKind) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.TypeNameMappings.JavaNativeTypeManager.ToJniName(TypeDefinition type) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.JavaCallableWrappers.TypeNameMapGenerator.GetTypeMapping(Func`2 skipType, Func`2 key, Func`2 value) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Java.Interop.Tools.JavaCallableWrappers.TypeNameMapGenerator.WriteJavaToManaged(Stream output) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Xamarin.Android.Tasks.GenerateJavaStubs.UpdateWhenChanged(String path, Action`1 generator) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Xamarin.Android.Tasks.GenerateJavaStubs.WriteTypeMappings(List`1 types) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Xamarin.Android.Tasks.GenerateJavaStubs.Run(DirectoryAssemblyResolver res) [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Xamarin.Android.Tasks.GenerateJavaStubs.Execute() [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [D:\MyAndroidApp.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2153,3): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() [D:\MyAndroidApp.csproj]
Done Building Project "D:\MyAndroidApp.csproj" (default targets) -- FAILED.

有什么线索或解决方案或变通方法吗?

更新:即使将Visual Studio 2017更新到15.8.2版本,问题仍然存在。


看起来你的参数不起作用。 - SmAster
1
升级到15.8.2版本并查看是否已修复。 - magicandre1981
@magicandre1981,现在的计划就是尝试更新。稍后会立即进行更新。 - RinoTom
@SmAster,我不确定你指的是哪个参数...如果你能给它命名,那会很有帮助。 - RinoTom
将问题报告给 Microsoft:https://github.com/xamarin/xamarin-android/issues/new - magicandre1981
显示剩余6条评论
1个回答

5

我不是Xamarin Android项目的专家,但想给出一些建议:

  1. 根据这个旧bug,这可能是由于悬空引用引起的。因此,请检查您的引用,清理项目,手动清理输出(Release / Debug)文件夹,然后尝试重新构建项目。
  2. 根据错误消息,错误来自这个文件中的ToJniNameFromAttributes方法。因此,请检查对Java.interop包的引用。
  3. 最后,您可以创建一个新的Xamarin Android应用程序,然后将工作和不工作的项目配置文件(csproj文件,卸载项目并右键单击解决方案资源管理器以编辑csproj文件)并排比较,以找出问题所在的项目配置。

希望这能有所帮助!

问题特定答案

以下是我为解决问题而进行的项目引用更改。将其添加在此处,因为它可以更有助于阅读答案的人理解问题\解决方案。

原始引用如下:

<Reference Include="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="Mono.Android.Export, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="mscorlib">
  <Private>False</Private>
</Reference>
<Reference Include="System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
</Reference>

修改后的参考文献(构建通过):

<Reference Include="Mono.Android" />
<Reference Include="Mono.Android.Export" />
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml" />

谢谢您的回答。悬空引用的更正对我很有帮助。它为我的解决方案完美建立了基础。我的引用所做的确切更改已在您的回答中更新。 - RinoTom
最糟糕的是,根据 Bugzilla 评论,自从 2012 年以来,Xamarin Android 的错误处理中一直存在一个低悬果实,令人遗憾的是,Xamarin 团队直到现在都没有采取任何具体措施改进构建失败时的错误消息。现在是 Xamarin 团队适当处理此问题并为开发人员提供适当消息以了解实际根本原因的时候了。 - RinoTom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接