如何检查可执行文件是否与已安装的.NET版本兼容

时间:2017-01-18 14:01:14

标签: c# .net compatibility target

我是一名软件测试员。我得到了一个可执行文件来测试给定的机器。在测试中,可执行文件表现得很糟糕,任何人都无法解释。

经过大量的研究和调试后,我找到了原因:为.NET目标框架4.6构建的可执行文件,但该机器配备了.NET 4.5。 这产生了一些" MissingMethodExeception"对于像#34; string.Format()"这样的简单方法。一些try-catch捕获了这些异常,但是以错误的方式处理它们,因为没有人预料到它们会发生。

这里也描述了同样的问题:

Method not found: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)

我的问题:

  1. 当我尝试运行无法正常运行的可执行文件时,Windows是否意味着警告我,因为必要的.NET版本不可用?
  2. 一般来说,解决这个问题的最佳做法是什么?
  3. (我本来期望像复选框那样的东西"如果目标网络不可用则不执行"在VisualStudio中?!)

2 个答案:

答案 0 :(得分:1)

  

Windows不是要警告我......

您当然应该收到警告,不是来自Windows,而是来自CLR。对话框looks like this,单击是自动获取在计算机上部署和安装的所需框架版本。 CLR通过查找程序集中嵌入的[TargetFramework] attribute来执行此检查。如上所述,运行ildasm.exe以验证此属性。期望它丢失或具有足够低的值,因此对话框不会触发。

  

一般来说,处理这个问题的最佳做法是什么?

这是程序错误,程序集错误。您非常确信编译器使用的引用程序集仅适用于.NET 4.6版。这必须追溯到构建它的机器,最有可能是构建服务器。它没有正确设置,当构建工程师通过避免使用Visual Studio的许可副本而偷工减料时,这种常见的事故很常见。或者通过偏爱免费软件工具,詹金斯是一个普遍的祸害。

除了使[TargetFramework]属性错误或缺失之外,这种特殊的不幸事件特别容易诱发。所需要的只是使用c:\​​ windows \ microsoft.net \ framework中的程序集作为引用程序集,而不是需要目标程序包的正确程序集,并安装在c:\ program files(x86)\ reference assemblies目录中。 This Q+A有更多潜在客户。

修复构建服务器往往会有很多阻力点,最好的办法是作为测试人员提交错误报告。您还想为破解的catch-em-all异常处理编写一个异常处理,使问题难以诊断。

答案 1 :(得分:-1)

回答问题:

  1. 没有Windows并不是要警告您没有安装所需的.Net Framework来运行此可执行文件。但是,Windows将在Windows事件日志中记录错误或应用程序崩溃信息。
  2. 第二个问题......

    1. 通常,使用安装程序传送,部署或发布可执行文件。可以配置/编写安装程序,以便在没有安装.Net框架(exe / dll所需)的情况下警告用户。