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 の公開キー/バージョン番号を使用して、CLR に直接関連付けられている .Net フレームワークのバージョンを分類できます。mscorlib へのアセンブリ参照を使用して、バージョン情報を取得できます。

于 2010-02-01T17:11:59.157 に答える