Monotouch部署错误:
如果我使用System.Reflection(我认为这就是原因)
尝试部署时出现以下错误
无法链接程序集:Mono.Linker.ResolutionException:无法解析引用:System.Reflection.Emit.AssemblyBuilder 在Mono.Linker.Steps.MarkStep.ResolveTypeDefinition(Mono.Cecil.TypeReference类型)[0x00000] in:0 在Mono.Linker.Steps.MarkStep.MarkType(Mono.Cecil.TypeReference reference)[0x00000] in:0 在Mono.Linker.Steps.MarkStep.MarkMethodBody(Mono.Cecil.Cil.MethodBody body)[0x00000] in:0 在Mono.Linker.Steps.MarkStep.ProcessMethod(Mono.Cecil.MethodDefinition方法)[0x00000] in:0 在Mono.Linker.Steps.MarkStep.ProcessQueue()[0x00000] in:0 在Mono.Linker.Steps.MarkStep.Process()[0x00000]中:0 在Mono.Linker.Steps.MarkStep.Process(Mono.Linker.LinkContext context)[0x00000] in:0 在Mono.Linker.Pipeline.Process(Mono.Linker.LinkContext context)[0x00000] in:0 在MonoTouch.Tuner.Linker.Run(Mono.Linker.Pipeline管道,Mono.Linker.LinkContext上下文)[0x00000] in:0
在Simulator中一切正常。如果我不使用该库,我可以毫无问题地部署该应用程序。
答案 0 :(得分:1)
Monotouch不支持System.Reflection.Emit。这是因为所有代码必须存在于二进制文件中,并且在由提前编译器创建之后实际上由链接器链接。如果你将从C#发出代码,那么它就无法在运行时编译为二进制代码,因为iPhone上没有完整的.NET运行时。
无论如何,即使有一种方法如何在运行时编译为二进制并链接它(非常复杂的问题BTW),这将违反Apple的批准指南,其中说应用程序无法下载任何类型的代码并改变其行为在飞行中。
总而言之,避免反思。