2017-11-08 15 views
0

私はGetMethodを使用したいが、コード作成中にintellisenseによるメソッドが存在しないという問題が発生しました。 GetMethodを使うとGetRuntimeMethodがあり、これを使うとプロジェクトがビルドされます。 しかし、私はメソッドを取得しようとすると、常にnullを返します。問題のXamarin PCLプロファイル111 GetMethodはデバッグでのみ利用可能

コードは、これはnullを返します...しかし、私はブレークポイントに置けば、私の中

dbConnection.GetMethod("CreateTableAsync"); 

を書く

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

をSQLiteAsyncConnectionを見て、「CreateTableAsync」を取得しようとしていますイミディエイトウィンドウ...メソッドが存在し、適切なMethodInfoを返します。

なぜですか?

+0

おかげで、私は実際にかかわらず、私の問題を発見しました。 CreateTableAsyncには1つのパラメータがありますが、デフォルト値はCreateFlags = CreateFlag.Noneなので、Type配列には何も必要ないと仮定しました。 「new type [] {typeof(CreateFlags)}」を追加すると、MethodInfoが返されました。 –

答えて

1

リフレクションを使用してメソッドを呼び出している場合、リンカーは直接呼び出されることはありません。したがって、リリースモードでアプリケーションをビルドすると、リンカはコードを削除します。

これを防ぐには、このコードを削除しないようにリンカにヒントを与える必要があります。

これを行う1つの方法は、実行時に呼び出されていない決してクラスを作成することですが、リンカにホアヒンに十分である:

[Preserve(AllMembers = true)] 
public class LinkerPleaseInclude 
{ 
    public void Include(SQLiteAsyncConnection connection) 
    { 
     connection.CreateTableAsync(); 
    } 
} 
関連する問題