仲介コンポーネントを使用して Windows ストア アプリを構築しています。仲介コンポーネントは、デバイス上の RFID リーダーとの対話を可能にすることを目的としています。仲介されたコンポーネントによって公開されたクラスのインスタンスを初期化しようとすると、次System.TypeLoadException
のメッセージを受け取りました。Could not find or load a type. (Exception from HRESULT: 0x80131522).
2 つの異なるタブレット デバイスに Windows 8.1 Professional をクリーン インストールすることに反対しています。現在、両方でこの問題が発生しています。このソリューションは過去に機能しました。私が最近したことが、これを引き起こしているに違いありません。また、ハードウェア ベンダーが提供するサンプル アプリケーションを使用して、RFID リーダーにアクセスできることも確認しました。
私の Package.appxmanifest ファイルは次のようになります。
<Package ...>
...
<Extensions>
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>clrhost.dll</Path>
<ActivatableClass ActivatableClassId="MyApp.RFID.Component.RfidDevice" ThreadingModel="STA">
<ActivatableClassAttribute Name="DesktopApplicationPath" Type="string" Value="C:\Program Files (x86)\MyApp\RFID" />
</ActivatableClass>
</InProcessServer>
</Extension>
</Extensions>
</Package>
このソリューションは、x86 プラットフォームを対象として構築されています。C:\Program Files (x86)\MyApp\RFID
次のコマンドを使用してターゲット デバイスにコンポーネントを登録しました(このホワイトペーパーに従って)。
icacls . /T /grant "ALL APPLICATION PACKAGES":RX
regsvr32 MyApp.RFID.Proxy.dll
ターゲット デバイスに Visual Studio 2013 x86 再頒布可能パッケージをインストールしました。また、すべての開発で行ってきたように、追加の依存関係 .dll を同じディレクトリに配置しました。
私が試した他のいくつかのこと:
C:\Program Files (x86)
マニフェストの ActivatableClassAttribute の値としてではなく、%PROGRAMFILES% を使用します。- スレッド モデルとして「STA」、「MTA」、および「両方」を使用します。
- ActivatableClassAttribute 値のパスに末尾のスラッシュを追加しました。
- すべてを完全にアンインストールし、最初からやり直しました。
- クラスに空のデフォルト コンストラクターを明示的に追加します
RfidDevice
。