我遇到了一个问题,我想使用 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();
}
}