gpt4 book ai didi

ios - TinyIoC、Xamarin.iOS、链接器设置

转载 作者:可可西里 更新时间:2023-11-01 05:55:11 26 4
gpt4 key购买 nike

我正在尝试让 TinyIoC 在 Xamarin.iOS 上运行,但我的运气并不好。我的项目链接器设置为“仅链接 SDK 程序集”。

我真的在做这么简单的事情:

public interface IPerson { int age { get; } }
public class Person : IPerson { public int age { get { return 99; } } }

然后我的注册码看起来像这样(我只是把它放在我的玩具应用程序中的 AppDelegate 中):

TinyIoCContainer.Current.Register<IPerson,Person>.AsMultiInstance();

当我试图获取一个 IPerson 时,我得到一个运行时异常,提示无法解析 IPerson(此代码紧接在玩具应用程序的 AppDelegate 中的注册代码之后):

IPerson person = TinyIoCContainer.Current.Resolve<IPerson>();

这是错误:

Unable to resolve type: TinyTest.IPerson

但是,如果我将链接器设置更改为“不链接”,则一切正常。但是,这显然是站不住脚的,因为二进制文件变得非常庞大。

我试过在 IPerson 接口(interface)和 Person 类上放置 [Preserve] 属性,但没有成功。我还尝试过手动声明 IPerson 类型的变量并使用 new Person() 实例化它,然后获取 age 属性,只是为了确保该类型包含在构建中,但也没有成功。

感觉我在这里遗漏了一些东西 - 有人可以指出我正确的方向吗?

谢谢!

最佳答案

这是一个 bug因为反射用于调用内部 Expression<TDelegate>构造函数。

链接器无法分析反射使用(它超出静态分析范围),因此它必须了解那些特殊情况。

This is obviously untenable, though, because the binary becomes enormous.

继续使用默认的 Link SDK 选项,但添加 --linkskip=System.Core到你的Additional mtouch arguments,在你的Project OptionsiOS Build

这样只有 System.Core(来自 SDK)不会被链接,并且大小的增加会小得多。当然,在新版本正确解决问题之前,这只是一种解决方法。

关于ios - TinyIoC、Xamarin.iOS、链接器设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com