Die Methode bestimmt die Version des benötigten .net-Frameworks einer Assembly, nicht nur die Version der CLR. Da z.B. 2.0, 3.0, 3.5 alle auf der CLR V. 2.0 basieren
(Stichwort Assembly.ImageRuntimeVersion)
Die einzige Möglichkeit ist leider alle referenzierten Assemblys zu laden, zu prüfen ob sie zum Framework zu gehören und die höchste Version zu finden.
using System.Reflection;
// ...
public static Version GetNetFXVersion(Assembly assembly)
{
if (assembly == null)
throw new ArgumentNullException("assembly");
Version version = new Version(1, 0);
foreach (AssemblyName assemblyName in assembly.GetReferencedAssemblies())
{
Assembly refAssembly = null;
try
{
refAssembly = Assembly.Load(assemblyName);
}
catch
{
continue;
}
if (refAssembly != null)
{
AssemblyProductAttribute[] productAttr = (AssemblyProductAttribute[])refAssembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);
if (productAttr.Length == 1)
{
if (productAttr[0].Product == "Microsoft® .NET Framework" &&
assemblyName.Version > version)
version = assemblyName.Version;
}
}
}
return version;
}
Kommentare zum Snippet