none
Visual Studio 2019でXamarin.Androidアプリをビルドした場合、Activator.CreateInstanceメソッドの実行時にTargetInvocationExceptionが発生する RRS feed

  • 質問

  • Xamarin.Androidアプリで、カスタムView(Buttonを継承したButtonEx)のクラスライブラリのアセンブリをAssembly.LoadFileメソッドでロードし、Activator.CreateInstanceメソッドでインスタンスを作成していますが、Visual Studio 2017でビルドした場合は、正常に動作する一方、Visual Studio 2019(Version 16.9)でビルドすると、Activator.CreateInstanceメソッド実行時にTargetInvocationExceptionが発生してしまいます。この現象の原因と対処方法を教えてください。


    【カスタムViewのコード】
    using Android.Content;
    using Android.Runtime;
    using Android.Widget;
    using System;

    namespace CustomView
    {
        [Register("android/widget/Button", DoNotGenerateAcw = true)]
        public class ButtonEx : Button
        {
            [Register(".ctor", "(Landroid/content/Context;)V", "")]
            public ButtonEx(Context context) : base(context)
            {

            }
        }
    }


    【アプリ側のコード:呼び出し部のみ】
    string path = "/storage/emulated/0/CustomView.dll";

    if (File.Exists(path))
    {
        Assembly assembly = Assembly.LoadFile(path);
        Type type = assembly.GetType("CustomView.ButtonEx");

         try
        {
            var instance = Activator.CreateInstance(type, new object[] { this });
        }
        catch (Exception ex)
        {
            var message = ex.Message;
          }
    }

    2021年3月8日 2:39

回答

  • Harukaさん、ご連絡いただきありがとうございます。

    本件についてですが、御社の米国チームから連絡があり、Visual Studio 2019 16.6以降から、消費メモリ削減、パフォーマンス向上などの改善のためにローカルに配置されたアセンブリの型マッピングは、呼び出し元のプロジェクトで同アセンブリを参照しない限り、行われないためにTargetInvocationExceptionの例外が発生してしまう(つまり、Visual Studioのバグではない)といった旨の回答をいただきました。

    以上、ご報告まで。
    2021年3月20日 5:37

すべての返信

  • Xamarin_Developerさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    プロジェクトフォルダーを開き、 `bin`フォルダーと` obj`フォルダーを削除して(これらのフォルダーはビルド時に自動的に生成されます)、再ビルドすることで、
    この問題が解消されるかどうかをご確認ください。

    他にご存知の方がおりましたら、情報をご共有いただければ幸いです。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月11日 6:37
    モデレータ
  • Harukaさん、ご返信いただきましてありがとうございます。

    早速、`bin`フォルダーと` obj`フォルダーを削除して再ビルドしてみましたが、結果は同じでTargetInvocationExceptionがスローされてしまいます。

    どなたか、Visual Studio 2019で、上記の質問欄に記載されたコードを実行して、TargetInvocationExceptionが発生するかどうかを、あるいは、発生しないか(発生しない場合は、Visual Studio 2019のバージョンとAndroid SDKのバージョン等)を教えていただけませんでしょうか。手順は以下の通りです。

    1. Androidクラスライブラリのプロジェクトを作成し、上記のカスタムViewのコードをビルドして、アセンブリ(CustomView.dll)を作成します。
    2. 作成したアセンブリ(CustomView.dll)をAndroid端末の内部ストレージ直下(/storage/emulated/0/)に(エクスプローラなどを使って)配置します。
    3. Xamarin.Androidアプリのプロジェクトを作成し、OnCreateイベント、またはButtonコントロールのClickイベントなどのプロシージャに上記のアプリ側のコードを追加し※、プロジェクトをデバッグ実行します。
      ※このプロジェクトの場合、外部のアセンブリを動的にロードしますので、プロジェクトにアセンブリ(CustomView.dll)を参照追加しないようにしてください。
    2021年3月13日 4:02
  • Xamarin_Developerさん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信いただきありがとうございます。

    CustomViewを使用してAndroidクラスライブラリプロジェクトを作成します。
    インストールしたnugetパッケージとVSバージョンをご共有いただけますでしょうか。


    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月16日 1:46
    モデレータ
  • Harukaさん、ご連絡いただきありがとうございます。

    当該プロジェクトは、VS2017のXamarin.Androidのクラスライブラリのテンプレートを使ってプロジェクトを作っていただき、上記のカスタムViewのコードを張り付けていただくとビルドできます。(VS2019ではXamarin.Androidのクラスライブラリのテンプレートはなくなっているようですが)

    よろしければ私が作成したプロジェクト自体(プロジェクトはそのままVS2019でもビルドできます)をお送りしたいと思いますが、この返信メールではファイルを添付できないようですので、何か方法があれば教えていただければと存じます。

    2021年3月16日 7:21
  • Xamarin_Developerさん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信いただきありがとうございます。

    >よろしければ私が作成したプロジェクト自体(プロジェクトはそのままVS2019でもビルドできます)をお送りしたいと思いますが、この返信メールではファイルを添付できないようですので、
    →→[お客様のアカウントが確認されるまで、本文に画像やリンクを含むことはできません。]というエラーがありましたか。

    この場合はアカウントを確認してみてください。その後、投稿にスクリーンショットを添付できます。
    スクリーンショットを添付する際に、個人情報などのプライバシーを消去することをご注意ください。
     
    アカウント確認の詳細については、以下のリンクを参照してください。
    https://social.microsoft.com/Forums/en-US/94f05325-8566-4c4c-806c-179a5a0beafc/verify-accounts-43?forum=reportabug

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月19日 7:54
    モデレータ
  • Harukaさん、ご連絡いただきありがとうございます。

    本件についてですが、御社の米国チームから連絡があり、Visual Studio 2019 16.6以降から、消費メモリ削減、パフォーマンス向上などの改善のためにローカルに配置されたアセンブリの型マッピングは、呼び出し元のプロジェクトで同アセンブリを参照しない限り、行われないためにTargetInvocationExceptionの例外が発生してしまう(つまり、Visual Studioのバグではない)といった旨の回答をいただきました。

    以上、ご報告まで。
    2021年3月20日 5:37
  • Xamarin_Developerさん、ご連絡いただきありがとうございます。

    本件につきまして、問題を起こす原因が分かったようでなによりです。
    また何か問題がありましたら、遠慮なくMSDNフォーラムをご利用ください。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月22日 1:51
    モデレータ