在MonoTouch的执行代码中动态?(Can execute Code Dynamically i

2019-08-18 05:26发布

在C#.NET,我们可以通过使用动态运行的代码System.Codedom.Provider 。 像相同的是否有可能在MonoTouch的(iPhone / iPad的)动态地执行该代码。

提前致谢,

Answer 1:

不可能。 首先,由于在Xamarin.iOS如何限制实际工作 (不运行就像一个普通的.NET应用程序,而是编译成一个普通的iOS应用),并因为安全性在苹果AppStore模式。 毕竟,你不能声明一个应用程序是安全的或符合规定,如果行为可能会随时更改。



Answer 2:

由于Xamarin.iOS 7.2版本有对C#的动态特征的一些基本支持。 从发行说明 :

实验:C#动态支持。 我们使人们有可能用C#动态与Xamarin.iOS但功能是非常复杂的,我们需要尝鲜让我们知道他们在其他平台上运行什么动态代码或想在Xamarin.iOS运行。

我已经成功地编译和执行匿名类型的动态访问:

 dynamic d = new { name = "x" };
 tmp = d.name;

目前,你需要添加一个Microsoft.CSharp.dll作为依赖 - 否则,你会得到类似这样的例外:

Error CS0518: The predefined type `Microsoft.CSharp.RuntimeBinder.Binder' is not defined or imported (CS0518) (DynamicSupportOniOS)
Error CS1969: Dynamic operation cannot be compiled without `Microsoft.CSharp.dll' assembly reference (CS1969) (DynamicSupportOniOS)

不幸的是既不ExpandoObject也不Json.Net的JObject现在的工作:

dynamic x = new ExpandoObject();
x.NewProp = "demo"; // this still works
Console.WriteLine(x.NewProp); // fails with Xamarin.iOS 7.2

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
Console.WriteLine(d.number); // fails with Xamarin.iOS 7.2

我创建了这个两个bug报告: https://bugzilla.xamarin.com/show_bug.cgi?id=20081和https://bugzilla.xamarin.com/show_bug.cgi?id=20082 。



文章来源: Can execute Code Dynamically in monotouch?