c#使用Assembly从应用程序获取框架/运行时版本

don*_*are 3 c# frameworks runtime version

我正在尝试通过程序集检查其他.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);
        }
Run Code Online (Sandbox Code Playgroud)

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

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

IAm*_*rey 5

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

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

这是一篇SO文章,有更多解释: 从.Net程序集中检索目标框架版本和目标框架配置文件

从该文章中为您提供的一些建议包括查找将为您提供目标框架或查看所使用的库版本的配置文件.两者都不是万无一失,但据我所知,这是你能做的最好的事情.