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

Kom*_*ner 7 .net c# compatibility target

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

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

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

找不到方法:'System.String System.String.Format(System.IFormatProvider,System.String,System.Object)

我的问题:

  1. 当我尝试运行无法正常运行的可执行文件时,Windows是不是要警告我,因为必要的.NET版本不可用?
  2. 一般来说,处理这个问题的最佳做法是什么?

(我希望VisualStudio中有一个复选框"如果目标网络不可用则不执行"?!)

Han*_*ant 0

Windows不是要警告我吗...

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

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

这是程序错误,程序集构建错误。您非常确信编译器使用的引用程序集仅适用于 .NET 版本 4.6。这必须追溯到构建它的机器,很可能是构建服务器。它的设置不正确,当构建工程师通过避免使用 Visual Studio 的许可副本来走捷径时,这种事故很常见。或者由于偏爱免费软件工具,Jenkins 成为了常见的祸害。

除了 [TargetFramework] 属性错误或丢失之外,这种特殊的事故特别容易引发。所需要做的就是使用 c:\windows\microsoft.net\framework 中的程序集作为参考程序集,而不是需要目标包并安装在 c:\program files (x86)\reference assembly 目录中的正确程序集。 此问答有更多线索。

修复构建服务器往往会遇到很多阻力,作为测试人员最好的做法是提交错误报告。您还想为损坏的一揽子异常处理编写一个,该异常处理使问题如此难以诊断。