【问题标题】:c# get framework / runtime version from application with Assemblyc# 使用Assembly从应用程序中获取框架/运行时版本
【发布时间】:2021-06-21 00:09:11
【问题描述】:

我正在尝试通过程序集检查其他 .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-

【问题讨论】:

  • “ImageRunetimeVersion”中的版本与通过全名调用的版本不同。最后一张图片:第一个版本:v.2.0.50727 第二个版本:1.0.0.0。现在我不知道这两个中哪个是应用程序使用的正确框架版本

标签: c# frameworks runtime version


【解决方案1】:

我想我可以为你解决一些问题。首先,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

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

【讨论】:

  • 我怀疑我从显示的版本号中得到了错误的想法,感谢您的许可。
【解决方案2】:

TargetFramework 与 CLR 版本不同。

例如,

CLR 4.0 TargetFramework:.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);
    }

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2011-03-21
      • 1970-01-01
      • 2018-12-13
      • 2021-06-01
      • 2014-01-29
      • 1970-01-01
      相关资源
      最近更新 更多