Приложения Xamarin основаны на VS2017, но не на VS для Mac - PullRequest
0 голосов
/ 28 ноября 2018

Я могу собрать приложение в Windows на последней версии VS2017 (15.9.2) для Android и iOS, и я могу использовать имитатор удаленного iOS для запуска приложения iOS, созданного на моеммакинтошОднако, когда я использую то же решение на моем iMac 2009 на High Sierra в Visual Studio для Mac, я получаю исключение для одной из моих библиотек .NET Standard из sgen.exe, когда msbuild пытается сгенерировать сборки сериализации:

Unhandled Exception:     
System.TypeLoadException: Could not load type of field '<TYPENAME>+<>c__DisplayClass3_0:obj' (0) due to: Could not load file or assembly 'Newtonsoft.Json,
 Version=12.0.0.0,
 Culture=neutral,
 PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.    

Чтобы попытаться обойти это, я закомментировал класс, который не работает (в cs в исключении выше), а также операторы using в этом файле, относящиеся к Newtonsoft.Json.После этого я получаю следующее исключение:

Unhandled Exception:     System.NullReferenceException: Object reference not set to an instance of an object    
at System.Xml.Serialization.XmlSerializationWriterCodeGen.FindXmlnsIndex (System.Xml.Serialization.MemberMapping[] members) [0x00014] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteStructMethod (System.Xml.Serialization.StructMapping mapping) [0x00359] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateMethod (System.Xml.Serialization.TypeMapping mapping) [0x00024] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationCodeGen.GenerateReferencedMethods () [0x0001b] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateEnd () [0x00000] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.TempAssembly.GenerateAssembly (System.Xml.Serialization.XmlMapping[] xmlMappings,  System.Type[] types,  System.String defaultNamespace,  System.Security.Policy.Evidence evidence,  System.Xml.Serialization.XmlSerializerCompilerParameters parameters,  System.Reflection.Assembly assembly,  System.Collections.Hashtable assemblies) [0x003a7] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializer.GenerateSerializer (System.Type[] types,  System.Xml.Serialization.XmlMapping[] mappings,  System.CodeDom.Compiler.CompilerParameters parameters) [0x000cb] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at Driver.Run (System.String[] args) [0x0042c] in <4ef54e9b09fa46d8995a283d81fa42c0>:0     
at Driver.Main (System.String[] args) [0x00005] in <4ef54e9b09fa46d8995a283d81fa42c0>:0      [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object    
at System.Xml.Serialization.XmlSerializationWriterCodeGen.FindXmlnsIndex (System.Xml.Serialization.MemberMapping[] members) [0x00014] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteStructMethod (System.Xml.Serialization.StructMapping mapping) [0x00359] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateMethod (System.Xml.Serialization.TypeMapping mapping) [0x00024] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationCodeGen.GenerateReferencedMethods () [0x0001b] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializationWriterCodeGen.GenerateEnd () [0x00000] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.TempAssembly.GenerateAssembly (System.Xml.Serialization.XmlMapping[] xmlMappings,  System.Type[] types,  System.String defaultNamespace,  System.Security.Policy.Evidence evidence,  System.Xml.Serialization.XmlSerializerCompilerParameters parameters,  System.Reflection.Assembly assembly,  System.Collections.Hashtable assemblies) [0x003a7] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at System.Xml.Serialization.XmlSerializer.GenerateSerializer (System.Type[] types,  System.Xml.Serialization.XmlMapping[] mappings,  System.CodeDom.Compiler.CompilerParameters parameters) [0x000cb] in <9e212f4dac634c83bb98a320d2c5ec4d>:0     
at Driver.Run (System.String[] args) [0x0042c] in <4ef54e9b09fa46d8995a283d81fa42c0>:0     
at Driver.Main (System.String[] args) [0x00005] in <4ef54e9b09fa46d8995a283d81fa42c0>:0      /Library/Frameworks/Mono.framework/Versions/5.16.0/lib/mono/msbuild/15.0/bin/Microsoft.Common.CurrentVersion.targets(3553, 5): error MSB6006: "sgen.exe" exited with code 1. Done building target "GenerateSerializationAssemblies" in project "<PROJECTNAME>.csproj" -- FAILED.

Я также попробовал следующее:

  • Изменение поведения компоновщика с чего-либо, чтобы вообще не связываться с тем, чтобы связать все,Различий не было.
  • В настройках проекта для параметра «Создать сборку сериализации» установлено значение «Выкл.».Приложение встроено в Windows, но при загрузке вылетает.В Visual Studio для Mac нет возможности управлять этим.
  • Изменение всех проектов PCL на проекты .NET Standard 2.0 и изменение всех проектов Xamarin Droid или iOS для использования PackageReferences вместо package.config
  • Добавление последней версии Newtonsoft.Json ко всем проектам в решении
  • Обновлены Mono, Xamarin и VS для Mac до последних версий

Есть ли у кого-нибудьесть идеи?Опять же, сборки для iOS и Android, похоже, работают в Visual Studio 2017 для Windows, но не на моем Mac.Заранее спасибо за помощь!

...