1

我已经在 SO 上发现了这个问题,但它只涉及 CF,所以我的问题是:如何检测是否为普通的 .Net、CF 或 Silverlight 构建了程序集?

4

2 回答 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 的公钥/版本号来分类它是哪个版本的 .Net 框架,因为它直接与 CLR 绑定。您可以使用对 mscorlib 的程序集引用来获取版本信息。

于 2010-02-01T17:11:59.157 回答