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

时间:2017-11-08 11:34:02

标签: c# xamarin xamarin.forms portable-class-library

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

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

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

这会返回null ...但是,如果我输入一个断点并写

dbConnection.GetMethod("CreateTableAsync");
在我的立即窗口中

...该方法存在并返回正确的MethodInfo。

为什么?

1 个答案:

答案 0 :(得分:1)

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

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

这样做的一种方法是创建一个永远不会在运行时调用的类,但这足以支持链接器:

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