gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:41:12 24 4
gpt4 key购买 nike

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

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

这里描述了一个类似的问题:

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

我的问题:

  1. 当我尝试运行一个可执行文件时,Windows 不是要警告我,但由于没有必要的 .NET 版本而无法正常运行吗?
  2. 通常处理此问题的最佳做法是什么?

(我希望在 VisualStudio 中出现类似复选框“如果目标网络不可用则不执行”的东西?!)

最佳答案

Isn't Windows meant to warn me ...

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

What is the best practice to deal with this problem in general?

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

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

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

关于c# - 如何检查可执行文件是否与已安装的 .NET 版本兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41721444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com