运行 仅安装了 .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>
我有一个针对 .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>