Xamarin PCL 配置文件 111 GetMethod 仅在调试中可用



我遇到了一个问题,我想使用 GetMethod,但在编写代码时根据智能感知不存在该方法。支持GetMethod的是GetRuntimeMethod,当使用时,项目会构建。但是,当我尝试获取方法时,它总是返回 null。

有问题的代码正在查看SQLiteAsyncConnection并试图获得"CreateTableAsync"

Type dbConnection = Database.GetType();
MethodInfo method = dbConnection.GetRuntimeMethod("CreateTableAsync", new Type[]{});

这将返回空...但是,如果我输入断点并写入

dbConnection.GetMethod("CreateTableAsync");

在我的即时窗口中...该方法存在并返回正确的方法信息。

为什么?

如果使用反射来获取和调用方法,链接器将不会看到它直接被调用。因此,在发布模式下构建应用时,链接器将剥离代码。

若要防止出现这种情况,您需要提示链接器不应删除此代码。

执行此操作的一种方法是创建一个类,该类永远不会在运行时调用,但足以在链接器中挂起:

[Preserve(AllMembers = true)]
public class LinkerPleaseInclude
{
    public void Include(SQLiteAsyncConnection connection)
    {
        connection.CreateTableAsync();
    }
}