この質問はすでにSOで見つかりましたが、CFのみを対象としているため、私の質問は、アセンブリが通常の.Net、CF、またはSilverlight用に構築されているかどうかをどのように検出するかです。
2 に答える
3
リンクされた質問への回答と同じアプローチを使用します。
public enum AssemblyType
{
CompactFramework,
Silverlight,
FullFramework,
NativeBinary
}
public AssemblyType GetAssemblyType(string pathToAssembly)
{
try
{
Assembly asm = Assembly.LoadFrom(pathToAssembly);
var mscorlib = asm.GetReferencedAssemblies().FirstOrDefault(a => string.Compare(a.Name, "mscorlib", true) == 0);
ulong token = BitConverter.ToUInt64(mscorlib.GetPublicKeyToken(), 0);
switch (token)
{
case 0xac22333d05b89d96:
return AssemblyType.CompactFramework;
case 0x89e03419565c7ab7:
return AssemblyType.FullFramework;
case 0x8e79a7bed785ec7c:
return AssemblyType.Silverlight;
default:
throw new NotSupportedException();
}
}
catch (BadImageFormatException)
{
return AssemblyType.NativeBinary;
}
}
于 2010-02-01T17:26:36.243 に答える
1
これを行う最も簡単な方法は、特定のアセンブリが参照している mscorlib.dll のバージョンを確認することだと思います。mscorlib の公開キー/バージョン番号を使用して、CLR に直接関連付けられている .Net フレームワークのバージョンを分類できます。mscorlib へのアセンブリ参照を使用して、バージョン情報を取得できます。
于 2010-02-01T17:11:59.157 に答える