ネット上で見つけたコードを使用して、fusion.dllを使用してGACにクエリを実行してきましたが、最近、OverflowExceptionを訴えるエラーレポートがいくつか返されています。
// If assemblyName is not fully qualified, a random matching may be returned!!!!
public static String QueryAssemblyInfo(String assemblyName)
{
ASSEMBLY_INFO assembyInfo = new ASSEMBLY_INFO();
assembyInfo.cchBuf = 512;
assembyInfo.currentAssemblyPath = new String('\0',
assembyInfo.cchBuf);
IAssemblyCache assemblyCache = null;
// Get IAssemblyCache pointer
IntPtr hr = GacApi.CreateAssemblyCache(out assemblyCache, 0);
if (hr == IntPtr.Zero)
{
hr = assemblyCache.QueryAssemblyInfo(1, assemblyName, ref assembyInfo);
if (hr != IntPtr.Zero)
Marshal.ThrowExceptionForHR(hr.ToInt32());
}
else
Marshal.ThrowExceptionForHR(hr.ToInt32());
return assembyInfo.currentAssemblyPath;
}
問題のあるコードは、実際にはInt64であるときにIntPtrをInt32に変換しようとしている場合ですが、問題はMarshal.ThrowExceptionForHRがInt32のみを受け入れるため、何をすべきかについて少し行き詰まっています。現時点では例外を処理しているだけですが、それを行う正しい方法を知りたいのですが。
マーロン