C# 检测程序集是否以普通.Net、CF或Silverlight为目标的最简单方法是什么?
我已经找到了,但它只包含CF,所以我的问题是:如何检测程序集是为普通.Net、CF还是Silverlight构建的?我认为最简单的方法是查看给定程序集引用的mscorlib.dll版本。您可以使用mscorlib的公钥/版本号来分类.Net framework的哪个版本,因为它直接绑定到CLR。您可以使用对mscorlib的程序集引用来获取版本信息。我认为最简单的方法是查看给定程序集引用的mscorlib.dll版本。您可以使用mscorlib的公钥/版本号来分类.Net framework的哪个版本,因为它直接绑定到CLR。您可以使用对mscorlib的程序集引用来获取版本信息。使用与链接问题答案相同的方法:C# 检测程序集是否以普通.Net、CF或Silverlight为目标的最简单方法是什么?,c#,.net,silverlight,detect,coldfusion,C#,.net,Silverlight,Detect,Coldfusion,我已经找到了,但它只包含CF,所以我的问题是:如何检测程序集是为普通.Net、CF还是Silverlight构建的?我认为最简单的方法是查看给定程序集引用的mscorlib.dll版本。您可以使用mscorlib的公钥/版本号来分类.Net framework的哪个版本,因为它直接绑定到CLR。您可以使用对mscorlib的程序集引用来获取版本信息。我认为最简单的方法是查看给定程序集引用的mscorlib.dll版本。您可以使用mscorlib的公钥/版本号来分类.Net framework的哪
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;
}
}
使用与链接问题答案相同的方法:
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;
}
}