代码之家  ›  专栏  ›  技术社区  ›  RinoTom

Visual Studio 2017更新至15.8.1/15.8.2后Xamarin Android应用程序项目生成问题

  •  7
  • RinoTom  · 技术社区  · 6 年前

    在将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之后,这个问题仍然存在。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Dipen Shah    6 年前

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

    1. 根据 this 老问题,这可能是由于悬空引用引起的。因此,请检查引用,清理项目,手动清理输出(Release/Debug)文件夹,然后再次尝试构建项目。
    2. 根据错误信息,错误来自 ToJniNameFromAttributes 中的方法 this 文件。所以最好查一下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" />