我遇到了一个问题,我想使用GetMethod但是在编写代码时根据intellisense不存在该方法。支持GetMethod的是GetRuntimeMethod,在使用时,项目构建。 但是当我尝试获取方法时,它总是返回null。
有问题的代码正在查看SQLiteAsyncConnection并尝试获取" CreateTableAsync"
Type dbConnection = Database.GetType();
MethodInfo method = dbConnection.GetRuntimeMethod("CreateTableAsync", new Type[]{});
这会返回null ...但是,如果我输入一个断点并写
dbConnection.GetMethod("CreateTableAsync");
在我的立即窗口中...该方法存在并返回正确的MethodInfo。
为什么?
答案 0 :(得分:1)
如果使用反射来获取和调用方法,链接器将不会直接调用它。因此,在发布模式下构建应用程序时,链接器将删除代码。
为防止这种情况,您需要提示链接器不应删除此代码。
这样做的一种方法是创建一个永远不会在运行时调用的类,但这足以支持链接器:
[Preserve(AllMembers = true)]
public class LinkerPleaseInclude
{
public void Include(SQLiteAsyncConnection connection)
{
connection.CreateTableAsync();
}
}