私が現在解決しようとしているのとまったく同じ問題に関するLarry Osterman の回答を読んだ後、私は自分の質問に対する答えを見つけたと思いました。
記録のために、質問は次のとおりでした: .Net (非 WinRT) から WinRT アセンブリの型を一覧表示するにはどうすればよいですか (私のファイルは明らかに .Winmd ではなく .dll ファイルです)。
したがって、次のコード スニペットを使用しました。
//note, this wrapper function returns the metadata file name and token
// it immediately releases the importer pointer
static Tuple<string, UInt32> ResolveTypeName(string typename)
{
string path;
object importer = null;
UInt32 token;
try
{
var hr = RoGetMetaDataFile(typename, IntPtr.Zero, out path, out importer, out token);
//TODO: check HR for error
return Tuple.Create(path, token);
}
finally
{
Marshal.ReleaseComObject(importer);
}
}
[DllImport("WinTypes.dll")]
static extern UInt32 RoGetMetaDataFile(
[MarshalAs(UnmanagedType.HString)] string name,
IntPtr metaDataDispenser,
[MarshalAs(UnmanagedType.HString)] out string metaDataFilePath,
[MarshalAs(UnmanagedType.Interface)] out object metaDataImport,
out UInt32 typeDefToken);
( https://gist.github.com/2920743にあります)
残念ながら、ゼロ以外の HResult を取得します。
ドキュメントを参照したところ、次のことがわかりました。
HR_RESULT_FROM_WIN32(ERROR_NO_PACKAGE) Windows ストア アプリにないプロセスから関数が呼び出されました。
つまり、.Net (非 WinRT) の型をまったく一覧表示できないということですか?