运行 仅安装了 .NET 4.5 的 .NET 4.6 应用程序

Running a .NET 4.6 app with only .NET 4.5 installed

我有一个针对 .NET Framework 4.6 的应用程序

当我 运行 它在一台只安装了 .NET 4.5 的机器上时,它启动了,并且大部分工作正常......我只是遇到了一些非常奇怪的无用 运行 时间错误,例如

"Method not found: '!!0[] System.Array.Empty()'"

(除其他外)提醒我问题出在 .NET 运行 上。

可以 在启动时调用在 .NET 4.5 下不起作用的方法,捕获错误并重新抛出有用的错误消息。在某些方面,这将是最具体的——只需检查我需要使用的函数,如果 .NET 的下一个版本有一个奇怪的乱序版本号,测试 $expectedversion <= $actualversion 将中断,而检查函数工作会没事的。

感觉真的又丑又乱。我不希望我的程序的启动例程必须执行此类操作。它也很难测试,因为我所有的机器上都有 .NET 4.6。

我可以检查注册表 - 除了注册表访问是 4.5 和 4.6 之间似乎发生变化的事情之一,我检查注册表设置的代码也会抛出无用的异常。我所看到的注册表检查内容适用于 known .NET 版本,但具有非常具体的版本号,不会告诉我很多关于未知 .NET 版本的信息还存在。

那么 - 检查 运行time 环境是否与我编译所针对的 .NET 版本相匹配的最佳方法是什么?

您可以在 app.config 中使用 <supportedRuntime> 标签,这将使运行时提供更好的信息。

示例配置为;

<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
   </startup>
</configuration>