3

我正在尝试通过程序集检查其他 .NET 应用程序正在使用的框架版本。我找到了两种获取框架版本的方法(首先通过 ImageRunetimeVersion 和程序集的 FullName),但是我从中得到了两个不同的值,我不知道哪个是正确的:

        Assembly ass = Assembly.LoadFrom(autPath);            
        string imageRuntimeVersion = ass.ImageRuntimeVersion;
        Console.WriteLine("ImageRunetimeVersion: " + imageRuntimeVersion);
        Console.WriteLine("FullName: " + ass.FullName);

        Console.WriteLine("");            
        Console.WriteLine("----");
        Console.WriteLine("Referenced Assemblies: ");
        Console.WriteLine(""); 

        AssemblyName[] referencedAssemblies = ass.GetReferencedAssemblies();
        foreach (AssemblyName a in referencedAssemblies)
        {
            Console.WriteLine(a.FullName);
        }

如果我要使用我的应用程序和例如paint.net 进行测试,结果是:

就像你看到的那样,我不能说哪个“版本”是正确的。最大的问题是,如果我要查看我的 .net 应用程序的项目属性,目标平台是 3.5 而不是 2.0 或 1.0-

4

3 回答 3

5

我想我可以为你澄清一些事情。首先,FullName 属性为您提供应用程序版本号。这是您设置的数字,与 .NET 框架版本无关。这意味着可以忽略 FullName 属性中的版本号。

imageRuntimeVersion 是 CLR 版本。不幸的是,2.0 涵盖了 .NET 2.0、3.0 和 3.5。从技术上讲,您的应用程序正在为您提供正确的信息,但它并不是您真正想要的信息(我不认为)。

这是一篇有更多解释的 SO 文章: Retrieve Target Framework Version and Target Framework Profile from a .Net Assembly

那篇文章给你的一些建议包括寻找一个可以为你提供目标框架的配置文件或查看所使用的库的版本。两者都不是万无一失的,但据我所知,这是你能做的最好的。

于 2012-04-11T12:16:03.500 回答
1

TargetFramework 与 CLR 版本不同。

例如,

CLR 4.0 目标框架:.NET 4.0 和 .NET 4.5

使用 TargetFrameworkAttribute 的解决方案http://www.lucbos.net/2011/08/get-targetframework-for-assembly.html

注意:TargetFrameworkAttribute 仅适用于 .NET 4.0。

    var targetFramework = "Unknown";
    var targetFrameworkAttributes = assembly.GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), true);
    if (targetFrameworkAttributes.Length > 0)
    {
        var targetFrameworkAttribute = (TargetFrameworkAttribute)targetFrameworkAttributes.First();
        targetFramework = (targetFrameworkAttribute.FrameworkDisplayName);
    }
于 2014-03-28T13:08:40.783 回答
0

Console.WriteLine("版本:{0}", Environment.Version.ToString());

于 2021-06-20T16:09:11.330 回答